3 /**************************************************************************
4 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
7 * for The ALICE HLT Project. *
9 * Permission to use, copy, modify and distribute this software and its *
10 * documentation strictly for non-commercial purposes is hereby granted *
11 * without fee, provided that the above copyright notice appears in all *
12 * copies and that both the copyright notice and this permission notice *
13 * appear in the supporting documentation. The authors make no claims *
14 * about the suitability of this software for any purpose. It is *
15 * provided "as is" without express or implied warranty. *
16 **************************************************************************/
18 // @file AliHLTTRDTracklet.cxx
19 // @author Theodor Rascanu
21 // @brief A datacontainer for tracklets for the HLT.
24 #include "AliHLTTRDTracklet.h"
29 //============================================================================
30 AliHLTTRDTracklet::AliHLTTRDTracklet():
50 #if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC)
51 fSize(sizeof(AliHLTTRDTracklet)-sizeof(fClusters[0])),
53 fSize(sizeof(AliHLTTRDTracklet))
62 //============================================================================
63 AliHLTTRDTracklet::AliHLTTRDTracklet(const AliTRDseedV1* const inTracklet):
66 fS2Y(inTracklet->fS2Y),
69 fChi2(inTracklet->fChi2),
70 // fExB(inTracklet->fExB),
71 // fVD(inTracklet->fVD),
72 // fT0(inTracklet->fT0),
73 // fS2PRF(inTracklet->fS2PRF),
74 // fDiffL(inTracklet->fDiffL),
75 // fDiffT(inTracklet->fDiffT),
76 // fX(inTracklet->fX),
77 // fY(inTracklet->fY),
78 // fZ(inTracklet->fZ),
79 // fS2Z(inTracklet->fS2Z),
80 fDet(inTracklet->fDet),
83 #if defined(__HP_aCC) || defined(__DECCXX) || defined(__SUNPRO_CC)
84 fSize(sizeof(AliHLTTRDTracklet)-sizeof(fClusters[0])),
86 fSize(sizeof(AliHLTTRDTracklet))
89 CopyDataMembers(inTracklet);
93 * Copy simple (non-pointer) data members from TRDTracklet to HLTTRDTracklet
95 //============================================================================
96 void AliHLTTRDTracklet::CopyDataMembers(const AliTRDseedV1* const inTracklet)
98 for (Int_t i=0; i < 2; i++){
99 fYref[i] = inTracklet->fYref[i];
100 fZref[i] = inTracklet->fZref[i];
101 fYfit[i] = inTracklet->fYfit[i];
102 fZfit[i] = inTracklet->fZfit[i];
104 fC[0] = inTracklet->GetC();
105 #ifndef HAVE_NOT_ALITRD_SEEDV1_r39693
106 fC[1] = inTracklet->GetC(1);
107 #endif //HAVE_NOT_ALITRD_SEEDV1_r39693
108 for (Int_t i=0; i < 3; i++){
109 fPad[i] = inTracklet->fPad[i];
110 // fCov[i] = inTracklet->fCov[i];
113 // for (Int_t i=0; i < 7; i++){
114 // fRefCov[i] = inTracklet->fRefCov[i];
117 // for (Int_t i=0; i < AliTRDseedV1::kNslices; i++){
118 // fdEdx[i] = inTracklet->fdEdx[i];
121 for (Int_t i=0; i < AliPID::kSPECIES; i++){
122 fProb[i] = inTracklet->fProb[i];
125 fBits = UInt_t(inTracklet->TestBits(-1)) >> 14;
127 for (Int_t iTimeBin = 0; iTimeBin < AliTRDseedV1::kNclusters; iTimeBin++){
128 AliTRDcluster* trdCluster = inTracklet->GetClusters(iTimeBin);
130 fPos[fCount] = iTimeBin;
131 new (&fClusters[fCount]) AliHLTTRDExtCluster(trdCluster);
133 fSize += sizeof(fClusters[0]);
136 //if((void*)&fClusters[fCount]!=(void*)GetEndPointer()){printf("ERRR");return;}
140 * Copy data to the output TRDseedV1
142 //============================================================================
143 void AliHLTTRDTracklet::ExportTRDTracklet(AliTRDseedV1* const outTracklet) const
145 //outTracklet->Reset(); we always use a fresh trdtracklet as input, so this is useless
146 outTracklet->SetBit(AliTRDseedV1::kOwner);
148 outTracklet->fN = fN;
149 outTracklet->fdX = fdX;
150 outTracklet->fX0 = fX0;
151 outTracklet->fS2Y = fS2Y;
152 outTracklet->fPt = fPt;
153 outTracklet->SetC(fC[0]);
154 #ifndef HAVE_NOT_ALITRD_SEEDV1_r39693
155 outTracklet->SetC(fC[1], 1);
156 #endif //HAVE_NOT_ALITRD_SEEDV1_r39693
157 outTracklet->fChi2 = fChi2;
158 // outTracklet->fExB = fExB;
159 // outTracklet->fVD = fVD;
160 // outTracklet->fT0 = fT0;
161 // outTracklet->fS2PRF = fS2PRF;
162 // outTracklet->fDiffL = fDiffL;
163 // outTracklet->fDiffT = fDiffT;
164 // outTracklet->fX = fX;
165 // outTracklet->fY = fY;
166 // outTracklet->fZ = fZ;
167 // outTracklet->fS2Z = fS2Z;
168 outTracklet->fDet = fDet;
170 for (Int_t i=0; i < 2; i++){
171 outTracklet->fYref[i] = fYref[i];
172 outTracklet->fZref[i] = fZref[i];
173 outTracklet->fYfit[i] = fYfit[i];
174 outTracklet->fZfit[i] = fZfit[i];
177 for (Int_t i=0; i < 3; i++){
178 outTracklet->fPad[i] = fPad[i];
179 // outTracklet->fCov[i] = fCov[i];
182 // for (Int_t i=0; i < 7; i++){
183 // outTracklet->fRefCov[i] = fRefCov[i];
186 // for (Int_t i=0; i < AliTRDseedV1::kNslices; i++){
187 // outTracklet->fdEdx[i] = fdEdx[i];
190 for (Int_t i=0; i < AliPID::kSPECIES; i++){
191 outTracklet->fProb[i] = fProb[i];
194 outTracklet->SetBit(UInt_t(fBits)<<14);
196 for(Int_t iCluster=0; iCluster < fCount; iCluster++){
197 AliTRDcluster *trdCluster = new AliTRDcluster();
198 fClusters[iCluster].ExportTRDCluster(trdCluster);
199 trdCluster->SetDetector(fDet);
200 outTracklet->fClusters[fPos[iCluster]] = trdCluster;
201 outTracklet->fIndexes[fPos[iCluster]] = iCluster;
209 //============================================================================
210 void AliHLTTRDTracklet::InitArrays()
212 for (Int_t i=0; i < 2; i++){
218 fC[0] = 0.; fC[1] = 0.;
219 for (Int_t i=0; i < AliPID::kSPECIES; i++)
221 for (Int_t i=0; i<AliTRDseedV1::kNclusters; i++)
227 * Prints main info about tracklet
229 //============================================================================
230 void AliHLTTRDTracklet::Print(Bool_t printClusters) const
232 //printf("--hltTracklet-- addr 0x%p(%i); fSize %i\n", this, (int)this, fSize);
233 printf(" fDet %i; fPt %f; fdX %f fN %i\n", fDet, fPt, fdX, fN);
235 if(!printClusters) return;
236 for (UInt_t iCluster = 0; iCluster < fCount; iCluster++){
237 printf(" [%i] ",iCluster);
238 fClusters[iCluster].Print();
243 * Save tracklet at block position
245 //============================================================================
246 AliHLTUInt32_t AliHLTTRDTracklet::SaveAt(AliHLTUInt8_t *const block, const AliTRDseedV1* const inTracklet)
248 AliHLTUInt32_t size=0;
250 memcpy(block,inTracklet,sizeof(AliTRDseedV1));
251 size+=sizeof(AliTRDseedV1);
253 for(int i=0; i<AliTRDseedV1::kNclusters; i++){
254 AliTRDcluster* inClust = inTracklet->GetClusters(i);
255 if(inClust) size+=AliHLTTRDCluster::SaveAt(block+size, inClust);
262 * Read tracklet from block
264 //============================================================================
265 AliHLTUInt32_t AliHLTTRDTracklet::LoadFrom(AliTRDseedV1 *const outTracklet, const AliHLTUInt8_t *const block)
267 AliHLTUInt32_t size=0;
269 memcpy(((AliHLTUInt8_t*)outTracklet)+sizeof(void*),block+sizeof(void*),sizeof(AliTRDseedV1)-sizeof(void*));
270 size+=sizeof(AliTRDseedV1);
272 for(int i=0; i<AliTRDseedV1::kNclusters; i++){
273 if(outTracklet->GetClusters(i)){
274 AliTRDcluster *const outClust = new AliTRDcluster;
275 outTracklet->fClusters[i]=outClust;
276 size+=AliHLTTRDCluster::LoadFrom(outClust, block+size);
280 outTracklet->SetBit(AliTRDseedV1::kOwner);