]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDcluster.cxx
More coorections in GetPrimaryIndex
[u/mrichter/AliRoot.git] / TRD / AliTRDcluster.cxx
CommitLineData
46d29e70 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
88cb7938 16/* $Id$ */
b9d0a01d 17
88cb7938 18
19///////////////////////////////////////////////////////////////////////////////
20// //
21// TRD cluster //
22// //
23///////////////////////////////////////////////////////////////////////////////
46d29e70 24
25#include "AliTRDcluster.h"
46d29e70 26#include "AliTRDrecPoint.h"
27
46d29e70 28ClassImp(AliTRDcluster)
29
46d29e70 30//_____________________________________________________________________________
5443e65e 31 AliTRDcluster::AliTRDcluster(const AliTRDrecPoint &p):AliCluster()
46d29e70 32{
33 //
a2b90f83 34 // Constructor from AliTRDrecPoint
46d29e70 35 //
36
a2b90f83 37 fDetector = p.GetDetector();
38 fTimeBin = p.GetLocalTimeBin();
46d29e70 39
a2b90f83 40 fTracks[0] = p.GetTrackIndex(0);
41 fTracks[1] = p.GetTrackIndex(1);
42 fTracks[2] = p.GetTrackIndex(2);
46d29e70 43
a2b90f83 44 fQ = p.GetEnergy();
46d29e70 45
a2b90f83 46 fY = p.GetY();
47 fZ = p.GetZ();
48 fSigmaY2 = p.GetSigmaY2();
49 fSigmaZ2 = p.GetSigmaZ2();
46d29e70 50
bbf92647 51 fSigmaY2 = 0.2;
52 fSigmaZ2 = 5.;
4f1c04d3 53 fNPads =0;
bbf92647 54}
55
56//_____________________________________________________________________________
5443e65e 57AliTRDcluster::AliTRDcluster(const AliTRDcluster &c):AliCluster()
bbf92647 58{
59 //
60 // Copy constructor
61 //
62
5443e65e 63 fTracks[0] = c.GetLabel(0);
64 fTracks[1] = c.GetLabel(1);
65 fTracks[2] = c.GetLabel(2);
a2b90f83 66
5443e65e 67 fY = c.GetY();
68 fZ = c.GetZ();
69 fSigmaY2 = c.GetSigmaY2();
70 fSigmaZ2 = c.GetSigmaZ2();
a2b90f83 71
5443e65e 72 fDetector = c.GetDetector();
73 fTimeBin = c.GetLocalTimeBin();
74 fQ = c.GetQ();
4f1c04d3 75 fNPads = c.fNPads;
a2b90f83 76
77}
78
a2b90f83 79//_____________________________________________________________________________
80void AliTRDcluster::AddTrackIndex(Int_t *track)
81{
82 //
83 // Adds track index. Currently assumed that track is an array of
84 // size 9, and up to 3 track indexes are stored in fTracks[3].
85 // Indexes are sorted according to:
86 // 1) index of max number of appearances is stored first
87 // 2) if two or more indexes appear equal number of times, the lowest
88 // ones are stored first;
89 //
bbf92647 90
88cb7938 91 const Int_t kSize = 9;
a2b90f83 92
88cb7938 93 Int_t entries[kSize][2], i, j, index;
a2b90f83 94
88cb7938 95 Bool_t indexAdded;
a2b90f83 96
88cb7938 97 for (i=0; i<kSize; i++) {
a2b90f83 98 entries[i][0]=-1;
99 entries[i][1]=0;
5443e65e 100 }
a2b90f83 101
88cb7938 102 for (Int_t k=0; k<kSize; k++) {
a2b90f83 103 index=track[k];
88cb7938 104 indexAdded=kFALSE;
105 j=0;
a2b90f83 106 if (index >= 0) {
88cb7938 107 while ( (!indexAdded) && ( j < kSize ) ) {
a2b90f83 108 if ((entries[j][0]==index) || (entries[j][1]==0)) {
109 entries[j][0]=index;
110 entries[j][1]=entries[j][1]+1;
88cb7938 111 indexAdded=kTRUE;
a2b90f83 112 }
113 j++;
114 }
115 }
5443e65e 116 }
a2b90f83 117
118 // sort by number of appearances and index value
119 Int_t swap=1, tmp0, tmp1;
120 while ( swap > 0) {
121 swap=0;
88cb7938 122 for(i=0; i<(kSize-1); i++) {
a2b90f83 123 if ((entries[i][0] >= 0) && (entries[i+1][0] >= 0)) {
124 if ((entries[i][1] < entries[i+1][1]) ||
125 ((entries[i][1] == entries[i+1][1]) &&
126 (entries[i][0] > entries[i+1][0]))) {
127 tmp0=entries[i][0];
128 tmp1=entries[i][1];
129 entries[i][0]=entries[i+1][0];
130 entries[i][1]=entries[i+1][1];
131 entries[i+1][0]=tmp0;
132 entries[i+1][1]=tmp1;
133 swap++;
134 }
135 }
136 }
5443e65e 137 }
a2b90f83 138
139 // set track indexes
5443e65e 140 for(i=0; i<3; i++) SetLabel(entries[i][0],i);
a2b90f83 141
142 return;
46d29e70 143
5443e65e 144}
46d29e70 145