1 /**************************************************************************
2 * Copyright(c) 1998-1999, 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 **************************************************************************/
18 ///////////////////////////////////////////////////////////////////////////////
20 // Time Projection Chamber clusters objects //
22 // Origin: Marian Ivanov , GSI Darmstadt
26 ///////////////////////////////////////////////////////////////////////////////
30 #include "AliComplexCluster.h"
31 #include "AliClusters.h"
35 const Int_t kDefSize = 1; //defalut size
40 //*****************************************************************************
42 //_____________________________________________________________________________
43 AliClusters::AliClusters()
54 //________________________________________________________________________
55 AliClusters::AliClusters(const AliClusters ¶m)
62 // copy constructor - dummy
64 fNclusters = param.fNclusters;
67 //________________________________________________________________________
68 AliClusters::AliClusters(const char *classname)
75 // Special constructor
77 fClass = gROOT->GetClass(classname);
80 Error("AliClusters", "%s is not a valid class name", classname);
81 if (!fClass->InheritsFrom(TObject::Class()))
82 Error("AliClusters", "%s does not inherit from TObject", classname);
84 fClusters = new TClonesArray(fClass->GetName(),100);
87 //______________________________________________________________________
88 AliClusters & AliClusters::operator =(const AliClusters & param)
91 // assignment operator - dummy
93 fNclusters=param.fNclusters;
96 //________________________________________________________________________
97 AliClusters::~AliClusters()
102 if (fClusters !=0) fClusters->Delete();
106 //_________________________________________________________________________
108 Bool_t AliClusters::SetClass(const Text_t *classname)
111 //set class of stored object
118 ::Fatal("AliClusters::SetClass", "ROOT system not initialized");
120 fClass = gROOT->GetClass(classname);
122 Error("AliClusters", "%s is not a valid class name", classname);
125 if (!fClass->InheritsFrom(TObject::Class())) {
126 Error("AliClusters", "%s does not inherit from TObject", classname);
132 //_____________________________________________________________________________
133 void AliClusters::SetArray(Int_t length)
136 // construct Clones array of object
138 if (fClusters!=0) delete fClusters;
140 Error("AliClusters", "cluster type not initialised \n SetClass before!");
143 fClusters = new TClonesArray(fClass->GetName(),length);
148 //_____________________________________________________________________________
149 const TObject* AliClusters::operator[](Int_t i)
152 // return cluster at internal position i
154 if (fClusters==0) return 0;
155 return fClusters->UncheckedAt(i);
157 //_____________________________________________________________________________
158 void AliClusters::Sort()
161 if (fClusters!=0) fClusters->Sort();
164 //_____________________________________________________________________________
165 TObject * AliClusters::InsertCluster( const TObject * c)
168 // Add a simulated cluster copy to the list
171 Error("AliClusters", "class type not specified");
174 if(!fClusters) fClusters=new TClonesArray(fClass->GetName(),100);
175 TClonesArray &lclusters = *fClusters;
176 return new(lclusters[fNclusters++]) AliComplexCluster(*((AliComplexCluster*)c));
179 //_____________________________________________________________________________
180 Int_t AliClusters::Find(Double_t y) const
183 // return index of cluster nearest to given y position
185 AliComplexCluster* cl;
186 cl=(AliComplexCluster*)fClusters->UncheckedAt(0);
187 if (y <= cl->GetY()) return 0;
188 cl=(AliComplexCluster*)fClusters->UncheckedAt(fNclusters-1);
189 if (y > cl->GetY()) return fNclusters;
190 Int_t b=0, e=fNclusters-1, m=(b+e)/2;
191 for (; b<e; m=(b+e)/2) {
192 cl = (AliComplexCluster*)fClusters->UncheckedAt(m);
193 if (y > cl->GetY()) b=m+1;
200 //_____________________________________________________________________________
202 void AliClusters::DrawClusters(Float_t shiftx, Float_t shifty,
203 Int_t color, Int_t size, Int_t style)
206 if (fClusters==0) return;
207 //draw marker for each of cluster
208 Int_t ncl=fClusters->GetEntriesFast();
209 for (Int_t i=0;i<ncl;i++){
210 AliComplexCluster *cl = (AliComplexCluster*)fClusters->UncheckedAt(i);
211 TMarker * marker = new TMarker;
212 marker->SetX(cl->GetX()+shiftx);
213 marker->SetY(cl->GetY()+shifty);
214 marker->SetMarkerSize(size);
215 marker->SetMarkerStyle(style);
216 marker->SetMarkerColor(color);