* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-Revision 1.1.2.2 2000/10/04 16:34:58 cblume
-Replace include files by forward declarations
-
-Revision 1.1.2.1 2000/09/22 14:47:52 cblume
-Add the tracking code
-
-*/
-
+/* $Id$ */
+
+////////////////////////////////////////////////////////////////////////////
+// //
+// Hit compression class //
+// Adapted from AliTPCTimeBin by Marian //
+// //
+////////////////////////////////////////////////////////////////////////////
+
#include "AliTRDcluster.h"
-#include "AliTRDconst.h"
#include "AliTRDtimeBin.h"
ClassImp(AliTRDtimeBin)
-//______________________________________________________
+//_____________________________________________________________________________
+AliTRDtimeBin::AliTRDtimeBin()
+ :TObject()
+ ,fN(0)
+{
+ //
+ // Default constructor
+ //
-void AliTRDtimeBin::InsertCluster(AliTRDcluster* c, UInt_t index) {
+ for (UInt_t i = 0; i < kMaxClusterPerTimeBin; i++) {
+ fClusters[i] = 0;
+ }
-// Insert cluster in TimeBin cluster array.
-// Clusters are sorted according to Y coordinate.
+}
- if (fN==kMAX_CLUSTER_PER_TIME_BIN) {
- printf("AliTRDtimeBin::InsertCluster(): Too many clusters !\n");
+//_____________________________________________________________________________
+void AliTRDtimeBin::InsertCluster(AliTRDcluster* c, UInt_t index)
+{
+ //
+ // Insert cluster in TimeBin cluster array.
+ // Clusters are sorted according to Y coordinate.
+ //
+
+ if (fN == kMaxClusterPerTimeBin) {
+ AliError("Too many clusters!\n");
return;
}
- if (fN==0) {fIndex[0]=index; fClusters[fN++]=c; return;}
- Int_t i=Find(c->GetY());
- memmove(fClusters+i+1 ,fClusters+i,(fN-i)*sizeof(AliTRDcluster*));
- memmove(fIndex +i+1 ,fIndex +i,(fN-i)*sizeof(UInt_t));
- fIndex[i]=index; fClusters[i]=c; fN++;
+
+ if (fN == 0) {
+ fIndex[0] = index;
+ fClusters[fN++] = c;
+ return;
+ }
+
+ Int_t i = Find(c->GetY());
+
+ memmove(fClusters+i+1,fClusters+i,(fN-i)*sizeof(AliTRDcluster*));
+ memmove(fIndex +i+1,fIndex +i,(fN-i)*sizeof(UInt_t));
+
+ fIndex[i] = index;
+ fClusters[i] = c;
+ fN++;
+
}
-//______________________________________________________
+//_____________________________________________________________________________
+Int_t AliTRDtimeBin::Find(Double_t y) const
+{
+ //
+ // Returns index of the cluster nearest in Y
+ //
-Int_t AliTRDtimeBin::Find(Double_t y) const {
+ if (y <= fClusters[ 0]->GetY()) {
+ return 0;
+ }
+ if (y > fClusters[fN-1]->GetY()) {
+ return fN;
+ }
-// Returns index of the cluster nearest in Y
+ Int_t b = 0;
+ Int_t e = fN - 1;
+ Int_t m = (b + e) / 2;
- if (y <= fClusters[0]->GetY()) return 0;
- if (y > fClusters[fN-1]->GetY()) return fN;
- Int_t b=0, e=fN-1, m=(b+e)/2;
- for (; b<e; m=(b+e)/2) {
- if (y > fClusters[m]->GetY()) b=m+1;
- else e=m;
+ for ( ; b < e; m = (b+e)/2) {
+ if (y > fClusters[m]->GetY()) {
+ b = m + 1;
+ }
+ else {
+ e = m;
+ }
}
+
return m;
+
}
-//______________________________________________________
+//_____________________________________________________________________________
AliTRDcluster *AliTRDtimeBin::operator[](Int_t i)
{
//