ddf3b307e77d14a32ae9019e359b6198e0719c53
[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 < 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->GetSigmaY2();
106   fTilt = fTRDtracklet->GetTilt();
107   fPadLength = fTRDtracklet->GetPadLength();
108   
109   fX0 = fTRDtracklet->GetX0();
110   for (Int_t i = 0; i < 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     fUsable[i] = fTRDtracklet->IsUsable(i);
116   }
117
118   for (Int_t i=0; i < 2; i++){
119     fYfit[i] = fTRDtracklet->GetYfit(i);
120     fZfit[i] = fTRDtracklet->GetZfit(i);
121     fYfitR[i] = fTRDtracklet->GetYfitR(i);
122     fZfitR[i] = fTRDtracklet->GetZfitR(i);
123     fLabels[i] = fTRDtracklet->GetLabels(i);
124   }
125   
126   fMeanz   = fTRDtracklet->GetMeanz();
127   fZProb   = fTRDtracklet->GetZProb();
128   fN       = fTRDtracklet->GetNbClusters();
129   fN2      = fTRDtracklet->GetN2();
130   fNUsed   = fTRDtracklet->GetNUsed();
131   fFreq    = fTRDtracklet->GetFreq();
132   fNChange = fTRDtracklet->GetNChange();
133   fMPads = fTRDtracklet->GetMPads();
134    
135   fC = fTRDtracklet->GetC();
136   fCC = fTRDtracklet->GetCC();
137   fChi2 = fTRDtracklet->GetChi2();
138   fChi2Z = fTRDtracklet->GetChi2Z();
139   
140   fDet = fTRDtracklet->GetDetector();
141   fMom = fTRDtracklet->GetMomentum();
142   fdX = fTRDtracklet->GetdX();
143   
144 }
145
146 /**
147  * Copy data to the output TRDseedV1
148  */
149 //============================================================================
150 void AliHLTTRDTracklet::ExportTRDTracklet(AliTRDseedV1 *outTracklet)
151 {
152   outTracklet->Reset();
153   /* ======= From AliTRDseedV1 ======== */
154   outTracklet->SetDetector(fDet);
155   outTracklet->SetMomentum(fMom);
156   outTracklet->SetDX(fdX);
157   
158   /* ======= From AliTRDseed ======== */
159   for (Int_t i=0; i < 2; i++){
160     outTracklet->SetYref(i, fYref[i]);
161     outTracklet->SetZref(i, fZref[i]);
162   }
163   
164   outTracklet->SetSigmaY(fSigmaY);
165   outTracklet->SetSigmaY2(fSigmaY2);
166   outTracklet->SetTilt(fTilt);
167   outTracklet->SetPadLength(fPadLength);
168   outTracklet->SetX0(fX0);
169
170   for (Int_t i=0; i < knTimebins; i++){
171     outTracklet->SetX(i,fX[i]);
172     outTracklet->SetX(i,fY[i]);
173     outTracklet->SetX(i,fZ[i]);
174     outTracklet->SetIndexes(i, fIndexes[i]);
175     outTracklet->SetUsable(i, fUsable[i]);
176   }
177   for (Int_t i=0; i < 2; i++){
178     outTracklet->SetYfit(i,fYfit[i]);
179     outTracklet->SetYfitR(i,fYfitR[i]);
180     outTracklet->SetZfit(i,fZfit[i]);
181     outTracklet->SetZfitR(i,fZfitR[i]);
182     outTracklet->SetLabels(i,fLabels[i]);
183   }
184   
185   outTracklet->SetMeanz(fMeanz);
186   outTracklet->SetZProb(fZProb);
187   outTracklet->SetN(fN);
188   outTracklet->SetN2(fN2);
189   outTracklet->SetNUsed(fNUsed);
190   outTracklet->SetFreq(fFreq);
191   outTracklet->SetNChange(fNChange);
192   outTracklet->SetMPads(fMPads);
193   outTracklet->SetC(fC);
194   outTracklet->SetCC(fCC);
195   outTracklet->SetChi2(fChi2);
196   outTracklet->SetChi2Z(fChi2Z);
197
198   for (Int_t iCluster = 0; iCluster < knTimebins; iCluster++){
199     if (fClusters[iCluster]){
200       AliTRDcluster *trdCluster = new AliTRDcluster();
201       fClusters[iCluster]->ExportTRDCluster(trdCluster);
202       outTracklet->SetClusters(iCluster, trdCluster);
203     }
204   }
205   
206 }
207
208
209 /**
210  * Init arrays
211  */
212 //============================================================================
213 void AliHLTTRDTracklet::InitArrays()
214 {
215   for (Int_t i=0; i < knTimebins; i++){
216     fClusters[i] = NULL;
217   }
218
219   for (Int_t i=0; i < 2; i++){
220     fYref[i] = -1;
221     fZref[i] = -1;
222   }
223   for (Int_t i = 0; i < knTimebins; i++){
224     fX[i] = -1;
225     fY[i] = -1;
226     fZ[i] = -1;
227     fIndexes[i] = -1;
228     fUsable[i] = -1;
229   }
230
231   for (Int_t i=0; i < 2; i++){
232     fYfit[i] = -1;
233     fZfit[i] = -1;
234     fYfitR[i] = -1;
235     fZfitR[i] = -1;
236     fLabels[i] = -1;
237   }
238   
239 }
240
241 /**
242  * Prints main info about tracklet
243  */
244 //============================================================================
245 void AliHLTTRDTracklet::Print(Bool_t printClusters)
246 {
247   //printf("--hltTracklet-- addr 0x%p(%i); fSize %i\n", this, (int)this, fSize);
248   printf("      fDet %i; dMom %f; fdX %f fN %i\n", fDet, fMom, fdX, fN);
249
250   if (printClusters){
251     
252     for (Int_t iCluster = 0; iCluster < knTimebins; iCluster++){
253       printf(" [%i] ",iCluster);
254       if (fClusters[iCluster]){
255         fClusters[iCluster]->Print();
256       }
257       else 
258         printf("      NULL\n");
259     }
260   }
261   
262 }
263
264 /**
265  * Read clusters to TRDtracklet from the memory
266  */
267 //============================================================================
268 void AliHLTTRDTracklet::ReadClustersFromMemory(void *input)
269 {
270   AliHLTUInt8_t *iterPtr = (AliHLTUInt8_t*) input;
271   AliHLTTRDCluster* hltCluster = NULL;
272   
273   for (Int_t iCluster = 0; iCluster < knTimebins; iCluster++){
274     // if we had something in the fClusters[iCluster] before copying,
275     // then this entry in the array should not be empty. Fill it.
276     if (fClusters[iCluster]){
277       hltCluster = (AliHLTTRDCluster*) iterPtr;
278       fClusters[iCluster] = hltCluster;
279       iterPtr += hltCluster->GetSize();
280       //hltCluster->Print();
281     }
282     
283   }
284 }