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 "AliHLTTRDTrack.h"
25 #include "AliHLTTRDTracklet.h"
30 //============================================================================
31 AliHLTTRDTrack::AliHLTTRDTrack():
37 fIntegratedLength(-1),
40 fSize(sizeof(AliHLTTRDTrack)),
49 * Creates hltTrack from TRDtrackV1
51 //============================================================================
52 AliHLTTRDTrack::AliHLTTRDTrack(const AliTRDtrackV1* const inTrack):
54 fFakeRatio(inTrack->fFakeRatio),
55 fChi2(inTrack->fChi2),
56 // fMass(inTrack->fMass),
58 fIntegratedLength(inTrack->GetIntegratedLength()),
60 fAlpha(inTrack->GetAlpha()),
61 fSize(sizeof(AliHLTTRDTrack)),
64 CopyDataMembers(inTrack);
69 * In principle should not be empty, but... we do not use it
71 //============================================================================
72 AliHLTTRDTrack::~AliHLTTRDTrack()
78 * Copy data members (except tracklets) from TRDtrackV1 to HLTTRDTrack.
80 //============================================================================
81 void AliHLTTRDTrack::CopyDataMembers(const AliTRDtrackV1* const inTrack)
83 for(Int_t i = 0; i < AliPID::kSPECIES; i++)
85 fPID[i] = inTrack->fPID[i];
88 for (Int_t i = 0; i < 3; i++)
90 fBudget[i] = inTrack->fBudget[i];
93 const Double_t* const Ptemp = inTrack->GetParameter();
94 for (Int_t i = 0; i < 5; i++)
99 const Double_t* const Ctemp = inTrack->GetCovariance();
100 for (Int_t i = 0; i < 15; i++)
105 UInt_t mask = inTrack->TestBits(-1);
108 for (Int_t iTracklet = 0; iTracklet < AliTRDtrackV1::kNplane; iTracklet++)
110 AliTRDseedV1* trdTracklet = inTrack->GetTracklet(iTracklet);
112 AliHLTTRDTracklet* hltTracklet = new (GetEndPointer()) AliHLTTRDTracklet(trdTracklet);
113 fSize += hltTracklet->GetSize();
114 fTrackletAtPlane[iTracklet] = kTRUE;
116 else fTrackletAtPlane[iTracklet] = kFALSE;
121 * Copy data to the output TRDtrackV1
123 //============================================================================
124 void AliHLTTRDTrack::ExportTRDTrack(AliTRDtrackV1* const outTrack) const
126 //outTrack->Reset(); we always use a new fresh trdtrack as input, so this is useless
127 outTrack->SetBit(AliTRDtrackV1::kOwner);
130 outTrack->fFakeRatio=fFakeRatio;
131 outTrack->fChi2=fChi2;
132 // outTrack->fMass=fMass;
134 outTrack->SetIntegratedLength(fIntegratedLength);
135 outTrack->Set(fX, fAlpha, fP, fC);
137 for(Int_t i = 0; i < AliPID::kSPECIES; i++)
139 outTrack->fPID[i] = fPID[i];
141 for (Int_t i = 0; i < 3; i++)
143 outTrack->fBudget[i]=fBudget[i];
146 outTrack->SetBit(UInt_t(fBits)<<14);
148 AliHLTUInt8_t *iterPtr = (AliHLTUInt8_t*)this+sizeof(*this);
149 AliHLTTRDTracklet* hltTracklet;
151 for (Int_t iTracklet = 0; iTracklet < AliTRDtrackV1::kNplane; iTracklet++){
152 if (fTrackletAtPlane[iTracklet]){
153 AliTRDseedV1* trdTracklet = new AliTRDseedV1();
154 hltTracklet = (AliHLTTRDTracklet*) iterPtr;
155 hltTracklet->ExportTRDTracklet(trdTracklet);
156 outTrack->SetTracklet(trdTracklet,iTracklet);
157 iterPtr += hltTracklet->GetSize();
167 //============================================================================
168 void AliHLTTRDTrack::InitArrays()
170 for(Int_t i = 0; i < AliTRDtrackV1::kNplane; i++){
171 fTrackletAtPlane[i]=kFALSE;
174 for(Int_t i = 0; i < AliPID::kSPECIES; i++)
179 for (Int_t i = 0; i < 3; i++)
183 for (Int_t i = 0; i < 5; i++)
187 for (Int_t i = 0; i < 15; i++)
194 * Print main values for HLTTrack
196 //============================================================================
197 void AliHLTTRDTrack::Print(Bool_t printTracklets) const
199 printf("--hltTrack-- addr %p; fSize %i\n", this, fSize);
200 printf(" fX = %f; fAlpha = %f\n", fX, fAlpha);
203 for(Int_t i = 0; i < AliPID::kSPECIES; i++)
205 printf("fPID[%i] = %f; ",i, fPID[i]);
209 for (Int_t i = 0; i < 3; i++)
211 printf("fBudget[%i] = %f; ",i, fBudget[i]);
217 AliHLTUInt8_t *iterPtr = (AliHLTUInt8_t*)this+sizeof(*this);
218 AliHLTTRDTracklet* hltTracklet;
220 for (Int_t i = 0; i < AliTRDtrackV1::kNplane; i++){
221 if (fTrackletAtPlane[i]){
223 hltTracklet = (AliHLTTRDTracklet*) iterPtr;
224 hltTracklet->Print();
225 iterPtr += hltTracklet->GetSize();
236 * Save track at block position
238 //============================================================================
239 AliHLTUInt32_t AliHLTTRDTrack::SaveAt(AliHLTUInt8_t *const block, const AliTRDtrackV1* const inTrack)
241 AliHLTUInt32_t size=0;
243 memcpy(block,inTrack,sizeof(AliTRDtrackV1));
244 size+=sizeof(AliTRDtrackV1);
246 for(int i=0; i<AliTRDtrackV1::kNplane; i++){
247 AliTRDseedV1* inTracklet = inTrack->GetTracklet(i);
248 if(inTracklet) size+=AliHLTTRDTracklet::SaveAt(block+size, inTracklet);
255 * Read track from block
257 //============================================================================
258 AliHLTUInt32_t AliHLTTRDTrack::LoadFrom(AliTRDtrackV1 *const outTrack, const AliHLTUInt8_t *const block)
260 AliHLTUInt32_t size=0;
262 memcpy(((AliHLTUInt8_t*)outTrack)+sizeof(void*),block+sizeof(void*),sizeof(AliTRDtrackV1)-sizeof(void*));
263 size+=sizeof(AliTRDtrackV1);
265 for(int i=0; i<AliTRDtrackV1::kNplane; i++){
266 if(outTrack->GetTracklet(i)){
267 AliTRDseedV1 *const outTracklet = new AliTRDseedV1;
268 outTrack->fTracklet[i]=outTracklet;
269 size+=AliHLTTRDTracklet::LoadFrom(outTracklet, block+size);
273 outTrack->SetBit(AliTRDtrackV1::kOwner);
274 outTrack->fBackupTrack=NULL;
275 outTrack->fTrackLow=NULL;
276 outTrack->fTrackHigh=NULL;