37c9f817e4432be01d93aedbe0e72c72c03f56b6
[u/mrichter/AliRoot.git] / HLT / TRD / AliHLTTRDTracklet.cxx
1 #include "AliHLTTRDTracklet.h"
2 #include "AliHLTTRDCluster.h"
3
4 /**
5  * Default Constructor
6  */
7 //============================================================================
8 AliHLTTRDTracklet::AliHLTTRDTracklet():
9   fTRDtracklet(NULL),
10   fSize(sizeof(AliHLTTRDTracklet)),
11   //fSigmaY(-1),
12   fSigmaY2(-1),
13   fTilt(-1),
14   fPadLength(-1),
15   fX0(-1),
16   //fMeanz(-1),
17   //fZProb(-1),
18   //fN(-1),
19   fN2(-1),
20   fNUsed(-1),
21   //fFreq(-1),
22   //fNChange(-1),
23   //fMPads(-1),
24   fC(-1),
25   //fCC(-1),
26   fChi2(-1),
27   //fChi2Z(-1),
28   fDet(-1),
29   fMom(-1),
30   fdX(-1)
31 {
32   InitArrays();
33 }
34
35 /**
36  * Main Constructor
37  */
38 //============================================================================
39 AliHLTTRDTracklet::AliHLTTRDTracklet(AliTRDseedV1 * inTracklet):
40   fTRDtracklet(NULL),
41   fSize(sizeof(AliHLTTRDTracklet)),
42   //fSigmaY(-1),
43   fSigmaY2(-1),
44   fTilt(-1),
45   fPadLength(-1),
46   fX0(-1),
47   //fMeanz(-1),
48   //fZProb(-1),
49   //fN(-1),
50   fN2(-1),
51   fNUsed(-1),
52   //fFreq(-1),
53   //fNChange(-1),
54   //fMPads(-1),
55   fC(-1),
56   //fCC(-1),
57   fChi2(-1),
58   //fChi2Z(-1),
59   fDet(-1),
60   fMom(-1),
61   fdX(-1)
62 {
63   InitArrays();
64  
65   fTRDtracklet = inTracklet;
66   CopyDataMembers();
67   //  Print(kFALSE);
68   AddClusters();
69 }
70
71 /**
72  * Add clusters to the HLTTRDTracklet
73  */
74 //============================================================================
75 void AliHLTTRDTracklet::AddClusters()
76 {
77   for (Int_t iTimeBin = 0; iTimeBin < AliTRDseedV1::kNTimeBins; iTimeBin++)
78     {
79 //       if (fClusters[iTimeBin])
80 //      HLTWarning("Trying to rewrite cluster in tracklet. Not good.");
81       AliTRDcluster* trdCluster = fTRDtracklet->GetClusters(iTimeBin);
82       if (trdCluster){
83         AliHLTTRDCluster * hltCluster = new (GetEndPointer()) AliHLTTRDCluster(trdCluster);
84         fSize += hltCluster->GetSize();
85         //HLTInfo("cluster %i; adr 0x%x; endPointer 0x%x; fSize %i", iTimeBin, hltCluster, GetEndPointer(), fSize);
86         fClusters[iTimeBin] = hltCluster;
87       }
88       else 
89         fClusters[iTimeBin] = NULL;
90       
91     }
92 }
93
94 /**
95  * Copy simple (non-pointer) data members from TRDTracklet to HLTTRDTracklet 
96  */
97 //============================================================================  
98 void AliHLTTRDTracklet::CopyDataMembers()
99 {
100   for (Int_t i=0; i < 2; i++){
101     fYref[i] = fTRDtracklet->GetYref(i);
102     fZref[i] = fTRDtracklet->GetZref(i);
103   }
104   //fSigmaY = fTRDtracklet->GetSigmaY();
105   fSigmaY2 = fTRDtracklet->GetS2Y();
106   fTilt = fTRDtracklet->GetTilt();
107   fPadLength = fTRDtracklet->GetPadLength();
108   
109   fX0 = fTRDtracklet->GetX0();
110   for (Int_t i = 0; i < AliTRDseedV1::kNTimeBins; i++){
111 //     fX[i] = fTRDtracklet->GetX(i);
112 //     fY[i] = fTRDtracklet->GetY(i);
113 //     fZ[i] = fTRDtracklet->GetZ(i);
114     fIndexes[i] = fTRDtracklet->GetIndexes(i);
115   }
116
117   for (Int_t i=0; i < 2; i++){
118     fYfit[i] = fTRDtracklet->GetYfit(i);
119     fZfit[i] = fTRDtracklet->GetZfit(i);
120     fLabels[i] = fTRDtracklet->GetLabels(i);
121   }
122   fLabels[2] = fTRDtracklet->GetLabels(2);
123   fN2      = fTRDtracklet->GetN2();
124   fNUsed   = fTRDtracklet->GetNUsed();
125    
126   fC = fTRDtracklet->GetC();
127   fChi2 = fTRDtracklet->GetChi2();
128   //fChi2Z = fTRDtracklet->GetChi2Z();
129   
130   fDet = fTRDtracklet->GetDetector();
131   fMom = fTRDtracklet->GetMomentum();
132   fdX = fTRDtracklet->GetdX();
133 }
134
135 /**
136  * Copy data to the output TRDseedV1
137  */
138 //============================================================================
139 void AliHLTTRDTracklet::ExportTRDTracklet(AliTRDseedV1 *outTracklet)
140 {
141   outTracklet->Reset();
142   /* ======= From AliTRDseedV1 ======== */
143   outTracklet->SetDetector(fDet);
144   outTracklet->SetMomentum(fMom);
145   outTracklet->SetDX(fdX);
146   
147   /* ======= From AliTRDseed ======== */
148   for (Int_t i=0; i < 2; i++){
149     outTracklet->SetYref(i, fYref[i]);
150     outTracklet->SetZref(i, fZref[i]);
151   }
152   
153   //outTracklet->SetSigmaY(fSigmaY);
154   //outTracklet->SetSigmaY2(fSigmaY2);
155   outTracklet->SetTilt(fTilt);
156   outTracklet->SetPadLength(fPadLength);
157   outTracklet->SetX0(fX0);
158
159   for (Int_t i=0; i < AliTRDseedV1::kNTimeBins; i++){
160 //     outTracklet->SetX(i,fX[i]);
161 //     outTracklet->SetX(i,fY[i]);
162 //     outTracklet->SetX(i,fZ[i]);
163     outTracklet->SetIndexes(i, fIndexes[i]);
164   }
165
166 //   for (Int_t i=0; i < 2; i++){
167 //     outTracklet->SetYfit(i,fYfit[i]);
168 //     outTracklet->SetZfit(i,fZfit[i]);
169 //   }
170   outTracklet->SetLabels(fLabels);
171   
172   //outTracklet->SetN2(fN2);
173   //outTracklet->SetNUsed(fNUsed);
174   outTracklet->SetC(fC);
175   outTracklet->SetChi2(fChi2);
176
177   for (Int_t iCluster = 0; iCluster < AliTRDseedV1::kNTimeBins; iCluster++){
178     if (fClusters[iCluster]){
179       AliTRDcluster *trdCluster = new AliTRDcluster();
180       fClusters[iCluster]->ExportTRDCluster(trdCluster);
181       //outTracklet->SetClusters(iCluster, trdCluster);
182     }
183   }
184 }
185
186
187 /**
188  * Init arrays
189  */
190 //============================================================================
191 void AliHLTTRDTracklet::InitArrays()
192 {
193   for (Int_t i=0; i < AliTRDseedV1::kNTimeBins; i++){
194     fClusters[i] = NULL;
195   }
196
197   for (Int_t i=0; i < 2; i++){
198     fYref[i] = -1;
199     fZref[i] = -1;
200   }
201   for (Int_t i = 0; i < AliTRDseedV1::kNTimeBins; i++){
202 //     fX[i] = -1;
203 //     fY[i] = -1;
204 //     fZ[i] = -1;
205     fIndexes[i] = -1;
206   }
207
208   for (Int_t i=0; i < 2; i++){
209     fYfit[i] = -1;
210     fZfit[i] = -1;
211 //     fYfitR[i] = -1;
212 //     fZfitR[i] = -1;
213     fLabels[i] = -1;
214   }
215   fLabels[2] = 0;
216 }
217
218 /**
219  * Prints main info about tracklet
220  */
221 //============================================================================
222 void AliHLTTRDTracklet::Print(Bool_t printClusters)
223 {
224   //printf("--hltTracklet-- addr 0x%p(%i); fSize %i\n", this, (int)this, fSize);
225   printf("      fDet %i; dMom %f; fdX %f fN %i\n", fDet, fMom, fdX, fN2);
226
227   if(!printClusters) return;
228   for (Int_t iCluster = 0; iCluster < AliTRDseedV1::kNTimeBins; iCluster++){
229     printf(" [%i] ",iCluster);
230     if (fClusters[iCluster]) fClusters[iCluster]->Print();
231     else printf("      NULL\n");
232   }
233 }
234
235 /**
236  * Read clusters to TRDtracklet from the memory
237  */
238 //============================================================================
239 void AliHLTTRDTracklet::ReadClustersFromMemory(void *input)
240 {
241   AliHLTUInt8_t *iterPtr = (AliHLTUInt8_t*) input;
242   AliHLTTRDCluster* hltCluster = NULL;
243   
244   for (Int_t iCluster = 0; iCluster < AliTRDseedV1::kNTimeBins; iCluster++){
245     // if we had something in the fClusters[iCluster] before copying,
246     // then this entry in the array should not be empty. Fill it.
247     if (fClusters[iCluster]){
248       hltCluster = (AliHLTTRDCluster*) iterPtr;
249       fClusters[iCluster] = hltCluster;
250       iterPtr += hltCluster->GetSize();
251       //hltCluster->Print();
252     }
253     
254   }
255 }