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