CbmRoot
Station.h
Go to the documentation of this file.
1 /*
2  * To change this license header, choose License Headers in Project Properties.
3  * To change this template file, choose Tools | Templates
4  * and open the template in the editor.
5  */
6 
7 /*
8  * File: Station.h
9  * Author: tablyaz
10  *
11  * Created on August 7, 2017, 2:05 PM
12  */
13 
14 #ifndef STATION_H
15 #define STATION_H
16 
17 #include "Bins.h"
18 #include "CbmTrackParam2.h"
19 #include "HitReader.h"
20 #include <functional>
21 #include <iostream>
22 #include <set>
23 
24 const Double_t cbmBinnedSigma = 4;
26 extern Double_t cbmBinnedSOL;
27 const Double_t cbmBinnedCrazyChiSq = 1000000;
28 
30 public:
31  struct Segment {
34  Double_t chiSq;
35  std::list<Segment*> children;
37 
39  : begin(beginHit)
40  , end(endHit)
42  , children()
43  , bestBranch(0) {}
44  Segment(const Segment&) = default;
45  Segment& operator=(const Segment&) = default;
46  };
47 
48  struct SegmentComp {
49  bool operator()(const Segment& s1, const Segment& s2) const {
50  if (&s1.begin < &s2.begin)
51  return true;
52  else if (&s1.end < &s2.end)
53  return true;
54  else
55  return false;
56  }
57  };
58 
59  /*struct KFParamsCoord
60  {
61  Double_t coord, tg, C11, C12, C21, C22;
62  };
63 
64  struct KFParams
65  {
66  KFParamsCoord xParams;
67  KFParamsCoord yParams;
68  Double_t chi2;
69  };*/
70 
71  struct KFStation {
72  struct Q {
73  Double_t Q11, Q12, Q21, Q22;
74  };
75 
76  Q qs[2];
77  };
78 
79 public:
80  /*static KFParams Extrapolate(const KFParams& params, Double_t deltaZ)
81  {
82  KFParams result = params;
83 
84  result.xParams.coord += params.xParams.tg * deltaZ;
85  result.xParams.C12 += params.xParams.C22 * deltaZ;
86  result.xParams.C11 += params.xParams.C12 * deltaZ + result.xParams.C12 * deltaZ;
87 
88  result.yParams.coord += params.yParams.tg * deltaZ;
89  result.yParams.C12 += params.yParams.C22 * deltaZ;
90  result.yParams.C11 += params.yParams.C12 * deltaZ + result.yParams.C12 * deltaZ;
91 
92  return result;
93  }*/
94 
95  CbmTrackParam2 Extrapolate(const CbmTrackParam2& parIn, Double_t zOut) {
96  CbmTrackParam2 parOut;
97  parOut.SetZ(zOut);
98  Double_t dz = zOut - parIn.GetZ();
99  Double_t tx = parIn.GetTx();
100  Double_t ty = parIn.GetTy();
101  Double_t timeCoeff = dz / std::sqrt(1 + tx * tx + ty * ty) / cbmBinnedSOL;
102 
103  parOut.SetX(parIn.GetX() + tx * dz);
104  parOut.SetY(parIn.GetY() + ty * dz);
105  parOut.SetTx(parIn.GetTx());
106  parOut.SetTy(parIn.GetTy());
107  parOut.SetTime(parIn.GetTime() + tx * timeCoeff + ty * timeCoeff);
108 
109  Double_t covIn[15];
110  parIn.CovMatrix(covIn);
111 
112  Double_t covOut[15];
113 
114  Double_t t1 = covIn[2];
115  Double_t t4 = covIn[9];
116  Double_t t6 = dz * t4 + t1;
117  covOut[0] = dz * t1 + t6 * dz + covIn[0] + fScatXSq;
118  Double_t t8 = covIn[6];
119  Double_t t11 = covIn[10];
120  Double_t t12 = dz * t11;
121  Double_t t14 = t12 + covIn[3];
122  Double_t covOut2 = t6;
123  Double_t covOut3 = t14;
124  Double_t t18 = covIn[11];
125  covOut[1] = t14 * dz + dz * t8 + covIn[1];
126  Double_t t21 = covIn[7];
127  Double_t t24 = covIn[12];
128  Double_t t26 = dz * t24 + t21;
129  covOut[5] = dz * t21 + t26 * dz + covIn[5] + fScatYSq;
130  Double_t covOut5 = t12 + t8;
131  Double_t covOut6 = t26;
132  Double_t t30 = covIn[13];
133  covOut[2] = covOut2;
134  covOut[6] = covOut5;
135  covOut[9] = t4;
136  Double_t covOut8 = t11;
137  Double_t t34 = timeCoeff * covOut8;
138  covOut[3] = covOut3;
139  covOut[7] = covOut6;
140  covOut[10] = covOut8;
141  covOut[12] = t24;
142  covOut[4] = covOut2 * timeCoeff + covOut3 * timeCoeff + dz * t18 + covIn[4];
143  covOut[8] = covOut5 * timeCoeff + covOut6 * timeCoeff + dz * t30 + covIn[8];
144  covOut[11] = timeCoeff * covOut[9] + t18 + t34;
145  covOut[13] = timeCoeff * covOut[12] + t30 + t34;
146  covOut[14] = timeCoeff * t18 + timeCoeff * t30 + covOut[11] * timeCoeff
147  + covOut[13] * timeCoeff + covIn[14];
148 
149  parOut.SetCovMatrix(covOut);
150 
151  return parOut;
152  }
153  /*static CbmTrackParam2 Extrapolate(const CbmTrackParam2& parIn, Double_t zOut)
154  {
155  CbmTrackParam2 parOut = parIn;
156 
157  Double_t dz = zOut - parIn.GetZ();
158  Double_t timeCoeff = dz / std::sqrt(1 + parIn.GetTx() * parIn.GetTx() + parIn.GetTy() * parIn.GetTy()) / cbmBinnedSOL;
159 
160  Double_t F_ini[5][5] = {
161  { 1, 0, dz, 0, 0 },
162  { 0, 1, 0, dz, 0 },
163  { 0, 0, 1, 0, 0 },
164  { 0, 0, 0, 1, 0 },
165  { 0, 0, timeCoeff, timeCoeff, 1 }
166  };
167 
168  TMatrixD F(5, 5);
169 
170  for (int i = 0; i < 5; ++i)
171  {
172  for (int j = 0; j < 5; ++j)
173  F(i, j) = F_ini[i][j];
174  }
175 
176  TMatrixD& X = parOut.GetVector();
177  TMatrixD Xtmp = X;
178  X.Mult(F, Xtmp);
179 
180  TMatrixD F_t(5, 5);
181  F_t.Transpose(F);
182 
183  TMatrixD& P = parOut.GetCovMatrix();
184  TMatrixD PF_t(5, 5);
185  PF_t.Mult(P, F_t);
186  P.Mult(F, PF_t);
187 
188  parOut.SetZ(zOut);
189 
190  return parOut;
191  }*/
192 
193  static void
194  Update(CbmTrackParam2& par, const CbmPixelHit* hit, Double_t& chiSq) {
195  Double_t xIn = par.GetX();
196  Double_t yIn = par.GetY();
197  Double_t txIn = par.GetTx();
198  Double_t tyIn = par.GetTy();
199  Double_t timeIn = par.GetTime();
200 
201  Double_t covIn[15];
202  par.CovMatrix(covIn);
203 
204  Double_t xMes = hit->GetX();
205  Double_t yMes = hit->GetY();
206  Double_t timeMes = hit->GetTime();
207 
208  Double_t dx = hit->GetDx();
209  Double_t dy = hit->GetDy();
210  Double_t dxy = hit->GetDxy();
211  Double_t dt = hit->GetTimeError();
212 
213  Double_t xOut;
214  Double_t yOut;
215  Double_t txOut;
216  Double_t tyOut;
217  Double_t timeOut;
218  Double_t covOut[15];
219 
220  Double_t t1 = covIn[0];
221  Double_t t2 = dt * dt;
222  Double_t t3 = dy * dy;
223  Double_t t4 = t2 * t3;
224  Double_t t5 = covIn[5];
225  Double_t t7 = covIn[14];
226  Double_t t10 = covIn[8];
227  Double_t t11 = t10 * t10;
228  Double_t t12 = t2 * t5 + t3 * t7 + t5 * t7 - t11 + t4;
229  Double_t t14 = dx * dx;
230  Double_t t15 = t2 * t14;
231  Double_t t19 = t14 * t3;
232  Double_t t21 = dxy * dxy;
233  Double_t t23 = t2 * dxy;
234  Double_t t24 = covIn[1];
235  Double_t t27 = t2 * t1;
236  Double_t t29 = t24 * t24;
237  Double_t t31 = t14 * t5;
238  Double_t t34 = t3 * t1;
239  Double_t t36 = covIn[4];
240  Double_t t37 = t36 * t36;
241  Double_t t40 = dxy * t24;
242  Double_t t43 = dxy * t36;
243  Double_t t46 = t1 * t5;
244  Double_t t50 = t24 * t36;
245  Double_t t54 = -t1 * t11 + t4 * t1 + 2 * t43 * t10 + 2 * t50 * t10
246  - t14 * t11 + t15 * t3 + t15 * t5 + t19 * t7 - t2 * t21
247  - t2 * t29 - t21 * t7 - 2 * t23 * t24 + t27 * t5 - t29 * t7
248  - t3 * t37 + t31 * t7 + t34 * t7 - t37 * t5 - 2 * t40 * t7
249  + t46 * t7;
250  Double_t t55 = 1 / t54;
251  Double_t t61 = dxy * t7 - t36 * t10 + t2 * t24 + t24 * t7 + t23;
252  Double_t t63 = t24 * t61 * t55;
253  Double_t t68 = dxy * t10 + t24 * t10 - t3 * t36 - t36 * t5;
254  Double_t t70 = t36 * t68 * t55;
255  Double_t t71 = t1 * t12 * t55 - t63 + t70;
256  Double_t t72 = xMes - xIn;
257  Double_t t78 = t1 * t7 + t14 * t7 + t15 + t27 - t37;
258  Double_t t83 = t1 * t10 + t14 * t10 - t43 - t50;
259  Double_t t86 = -t1 * t61 * t55 + t24 * t78 * t55 - t36 * t83 * t55;
260  Double_t t87 = yMes - yIn;
261  Double_t t94 = t19 + t31 + t34 - t21 - 2 * t40 + t46 - t29;
262  Double_t t97 = t1 * t68 * t55 - t24 * t83 * t55 + t36 * t94 * t55;
263  Double_t t98 = timeMes - timeIn;
264  xOut = t71 * t72 + t86 * t87 + t97 * t98 + xIn;
265  Double_t t106 = t10 * t68 * t55 + t24 * t12 * t55 - t5 * t61 * t55;
266  Double_t t111 = t10 * t83 * t55;
267  Double_t t112 = t5 * t78 * t55 - t111 - t63;
268  Double_t t120 = t10 * t94 * t55 + t24 * t68 * t55 - t5 * t83 * t55;
269  yOut = t106 * t72 + t112 * t87 + t120 * t98 + yIn;
270  Double_t t122 = covIn[2];
271  Double_t t125 = covIn[6];
272  Double_t t128 = covIn[11];
273  Double_t t131 = t122 * t12 * t55 - t125 * t61 * t55 + t128 * t68 * t55;
274  Double_t t139 = -t122 * t61 * t55 + t125 * t78 * t55 - t128 * t83 * t55;
275  Double_t t147 = t122 * t68 * t55 - t125 * t83 * t55 + t128 * t94 * t55;
276  txOut = t131 * t72 + t139 * t87 + t147 * t98 + txIn;
277  Double_t t149 = covIn[3];
278  Double_t t152 = covIn[7];
279  Double_t t155 = covIn[13];
280  Double_t t158 = t149 * t12 * t55 - t152 * t61 * t55 + t155 * t68 * t55;
281  Double_t t166 = -t149 * t61 * t55 + t152 * t78 * t55 - t155 * t83 * t55;
282  Double_t t174 = t149 * t68 * t55 - t152 * t83 * t55 + t155 * t94 * t55;
283  tyOut = t158 * t72 + t166 * t87 + t174 * t98 + tyIn;
284  Double_t t182 = -t10 * t61 * t55 + t36 * t12 * t55 + t7 * t68 * t55;
285  Double_t t190 = t10 * t78 * t55 - t36 * t61 * t55 - t7 * t83 * t55;
286  Double_t t194 = t7 * t94 * t55 - t111 + t70;
287  timeOut = t182 * t72 + t190 * t87 + t194 * t98 + timeIn;
288  covOut[0] = -t71 * t1 - t86 * t24 - t97 * t36 + t1;
289  covOut[1] = -t97 * t10 - t71 * t24 - t86 * t5 + t24;
290  covOut[5] = -t120 * t10 - t106 * t24 - t112 * t5 + t5;
291  covOut[2] = -t71 * t122 - t86 * t125 - t97 * t128 + t122;
292  covOut[6] = -t106 * t122 - t112 * t125 - t120 * t128 + t125;
293  covOut[9] = -t131 * t122 - t139 * t125 - t147 * t128 + covIn[9];
294  covOut[3] = -t71 * t149 - t86 * t152 - t97 * t155 + t149;
295  covOut[7] = -t106 * t149 - t112 * t152 - t120 * t155 + t152;
296  covOut[10] = -t131 * t149 - t139 * t152 - t147 * t155 + covIn[10];
297  covOut[12] = -t158 * t149 - t166 * t152 - t174 * t155 + covIn[12];
298  covOut[4] = -t86 * t10 - t71 * t36 - t97 * t7 + t36;
299  covOut[8] = -t112 * t10 - t106 * t36 - t120 * t7 + t10;
300  covOut[11] = -t139 * t10 - t131 * t36 - t147 * t7 + t128;
301  covOut[13] = -t166 * t10 - t158 * t36 - t174 * t7 + t155;
302  covOut[14] = -t190 * t10 - t182 * t36 - t194 * t7 + t7;
303 
304  t1 = xMes - xOut;
305  t2 = dy * dy - covOut[5];
306  t3 = dt * dt;
307  t4 = covOut[8] * covOut[8];
308  t5 = dxy * dxy;
309  Double_t t6 = dx * dx;
310  t7 = covOut[1] * covOut[1];
311  Double_t t8 = t2 * t6;
312  Double_t t9 = t2 * covOut[0];
313  t10 = -t8 + t7 + t9 + t5;
314  t6 = -covOut[0] + t6;
315  t11 = covOut[4] * covOut[4];
316  t12 = -dxy + covOut[1];
317  Double_t t13 = dxy * covOut[1];
318  t14 = t12 * covOut[8];
319  t15 = 2;
320  t5 = -t15 * (t14 * covOut[4] + t13 * (covOut[14] - t3)) - t10 * t3
321  - t11 * t2 - t4 * t6 - (t8 - t7 - t9 - t5) * covOut[14];
322  t7 = yMes - yOut;
323  t8 = -t12 * t3 + t12 * covOut[14] - covOut[4] * covOut[8];
324  t9 = timeMes - timeOut;
325  t14 = -t2 * covOut[4] - t14;
326  t5 = 1 / t5;
327  t12 = -t12 * covOut[4] - t6 * covOut[8];
328 
329  par.SetX(xOut);
330  par.SetY(yOut);
331  par.SetTx(txOut);
332  par.SetTy(tyOut);
333  par.SetTime(timeOut);
334  par.SetCovMatrix(covOut);
335 
336  chiSq +=
337  t1 * (t1 * (t2 * t3 - t2 * covOut[14] - t4) - t7 * t8 - t9 * t14) * t5
338  - t7 * (t1 * t8 - t7 * (t3 * t6 - t6 * covOut[14] - t11) + t9 * t12) * t5
339  - t9 * (t1 * t14 + t12 * t7 - t9 * (t13 * t15 - t10)) * t5;
340  }
341  /*static void Update(CbmTrackParam2& par, const CbmPixelHit* hit, Double_t& chiSq)
342  {
343  TMatrixD& X = par.GetVector();
344  TMatrixD& P = par.GetCovMatrix();
345  TMatrixD H(3, 5);
346  H(0, 0) = 1;
347  H(1, 1) = 1;
348  H(2, 4) = 1;
349 
350  TMatrixD Z(3, 1);
351  Z(0, 0) = hit->GetX();
352  Z(1, 0) = hit->GetY();
353  Z(2, 0) = hit->GetTime();
354 
355  TMatrixD Y = Z;
356  TMatrixD HX(3, 1);
357  HX.Mult(H, X);
358  Y.Minus(Z, HX);
359 
360  TMatrixD H_t(5, 3);
361  H_t.Transpose(H);
362 
363  TMatrixD R(3, 3);
364  R(0, 0) = hit->GetDx() * hit->GetDx();
365  R(0, 1) = hit->GetDxy();
366  R(1, 1) = hit->GetDy() * hit->GetDy();
367  R(1, 0) = hit->GetDxy();
368  R(2, 2) = hit->GetTimeError() * hit->GetTimeError();
369 
370  TMatrixD HP(3, 5);
371  HP.Mult(H, P);
372 
373  TMatrixD HPH_t(3, 3);
374  HPH_t.Mult(HP, H_t);
375 
376  TMatrixD S(3, 3);
377  S.Plus(R, HPH_t);
378 
379  TMatrixD S_1 = S;
380  S_1.InvertFast();
381 
382  TMatrixD H_tS_1(5, 3);
383  H_tS_1.Mult(H_t, S_1);
384 
385  TMatrixD K(5, 3);// Optimal Kalman gain
386  K.Mult(P, H_tS_1);
387 
388  TMatrixD KY(5, 1);
389  KY.Mult(K, Y);
390 
391  X += KY;
392 
393  TMatrixD KHP(5, 5);
394  KHP.Mult(K, HP);
395 
396  P -= KHP;
397 
398  //
399  HX.Mult(H, X);
400  Y.Minus(Z, HX);
401 
402  HP.Mult(H, P);
403  HPH_t.Mult(HP, H_t);
404 
405  TMatrixD V = R;
406  V -= HPH_t;
407 
408  TMatrixD V_1 = V;
409  V_1.InvertFast();
410 
411  TMatrixD Y_t(1, 3);
412  Y_t.Transpose(Y);
413 
414  TMatrixD V_1Y(3, 1);
415  V_1Y.Mult(V_1, Y);
416 
417  TMatrixD Y_tV_1Y(1, 1);
418  Y_tV_1Y.Mult(Y_t, V_1Y);
419 
420  chiSq += Y_tV_1Y(0, 0);
421  }*/
422 
423 public:
424  CbmBinnedStation(ECbmModuleId stationType,
425  Double_t minZ,
426  Double_t maxZ,
427  int nofYBins,
428  int nofXBins,
429  int nofTBins);
432 
433  virtual ~CbmBinnedStation() {}
435  Double_t GetMinZ() const { return fMinZ; }
436  Double_t GetMaxZ() const { return fMaxZ; }
437  void SetMinZ(Double_t v) { fMinZ = v; }
438  void SetMaxZ(Double_t v) { fMaxZ = v; }
439  void SetMinY(Double_t v) { fMinY = v; }
440  void SetMaxY(Double_t v) { fMaxY = v; }
441  void SetMinX(Double_t v) { fMinX = v; }
442  void SetMaxX(Double_t v) { fMaxX = v; }
443 
444  void SetTBinSize(Double_t v) { fTBinSize = v; }
445 
446  void SetMinT(Double_t v) {
447  fMinT = v;
449  }
450 
451  void SetDefaultUse() { fDefaultUse = true; }
452 
453  Double_t GetDx() const { return fDx; }
454 
455  void SetDx(Double_t v) {
456  if (v > fDx) {
457  fDx = v;
458  fDxSq = v * v;
459  }
460  }
461 
462  Double_t GetDy() const { return fDy; }
463 
464  void SetDy(Double_t v) {
465  if (v > fDy) {
466  fDy = v;
467  fDySq = v * v;
468  }
469  }
470 
471  Double_t GetDt() const { return fDt; }
472 
473  void SetDt(Double_t v) {
474  if (v > fDt) {
475  fDt = v;
476  fDtSq = v * v;
477  }
478  }
479 
480  Double_t GetScatX() const { return fScatX; }
481  Double_t GetScatXSq() const { return fScatXSq; }
482 
483  void SetScatX(Double_t v) {
484  fScatX = v;
485  fScatXSq = v * v;
486  }
487 
488  Double_t GetScatY() const { return fScatY; }
489  Double_t GetScatYSq() const { return fScatYSq; }
490 
491  void SetScatY(Double_t v) {
492  fScatY = v;
493  fScatYSq = v * v;
494  }
495 
496  Double_t GetNofSigmaX() const { return fNofSigmasX; }
497  Double_t GetNofSigmaXSq() const { return fNofSigmasXSq; }
498 
499  void SetNofSigmaX(Double_t v) {
500  fNofSigmasX = v;
501  fNofSigmasXSq = v * v;
502  }
503 
504  Double_t GetNofSigmaY() const { return fNofSigmasY; }
505  Double_t GetNofSigmaYSq() const { return fNofSigmasYSq; }
506 
507  void SetNofSigmaY(Double_t v) {
508  fNofSigmasY = v;
509  fNofSigmasYSq = v * v;
510  }
511 
512  int GetXInd(Double_t v) const {
513  int ind = (v - fMinX) / fXBinSize;
514 
515  if (ind < 0)
516  ind = 0;
517  else if (ind >= fNofXBins)
518  ind = fNofXBins - 1;
519 
520  return ind;
521  }
522 
523  int GetYInd(Double_t v) const {
524  int ind = (v - fMinY) / fYBinSize;
525 
526  if (ind < 0)
527  ind = 0;
528  else if (ind >= fNofYBins)
529  ind = fNofYBins - 1;
530 
531  return ind;
532  }
533 
534  int GetTInd(Double_t v) const {
535  int ind = (v - fMinT) / fTBinSize;
536 
537  if (ind < 0)
538  ind = 0;
539  else if (ind >= fNofTBins)
540  ind = fNofTBins - 1;
541 
542  return ind;
543  }
544 
545  void SetStage(char v) { fStage = v; }
546 
547  virtual void Init() {
548  fYBinSize = (fMaxY - fMinY) / fNofYBins;
549  fXBinSize = (fMaxX - fMinX) / fNofXBins;
550  }
551 
552  virtual void Clear() {
553  fDx = 0;
554  fDxSq = 0;
555  fDy = 0;
556  fDySq = 0;
557  fDt = 0;
558  fDtSq = 0;
559  fStage = 0;
561  fSegments.clear();
562  }
563 
564  virtual void
565  AddHit(ECbmModuleId type, const CbmPixelHit* hit, Int_t index) = 0;
566  virtual void
567  IterateHits(std::function<void(CbmTBin::HitHolder&)> handleHit) = 0;
568  virtual void
569  SearchHits(const CbmTrackParam2& stateVec,
570  Double_t stateZ,
571  std::function<void(CbmTBin::HitHolder&)> handleHit) = 0;
572  virtual void
573  SearchHits(Segment& segment,
574  std::function<void(CbmTBin::HitHolder&)> handleHit) = 0;
575  virtual void
576  SearchHits(Double_t minZ,
577  Double_t maxZ,
578  Double_t minY,
579  Double_t maxY,
580  Double_t minX,
581  Double_t maxX,
582  Double_t minT,
583  Double_t maxT,
584  std::function<void(CbmTBin::HitHolder&)> handleHit) = 0;
585 
586  void IterateSegments(std::function<void(Segment&)> handleSegment) {
587  for (std::set<Segment, SegmentComp>::iterator i = fSegments.begin();
588  i != fSegments.end();
589  ++i)
590  handleSegment(const_cast<Segment&>(*i));
591  }
592 
594  IterateHits([&](CbmTBin::HitHolder& hitHolder) -> void {
595  Segment segment(&fVertexHolder, &hitHolder);
596  fSegments.insert(segment);
597  });
598  }
599 
600  void NulifySegments() {
601  for (std::set<Segment, SegmentComp>::iterator i = fSegments.begin();
602  i != fSegments.end();
603  ++i) {
604  Segment& segment = const_cast<Segment&>(*i);
605  segment.chiSq = 0;
606  }
607  }
608 
609 protected:
611  Double_t fMinZ;
612  Double_t fMaxZ;
616  Double_t fYBinSize;
617  Double_t fXBinSize;
618  Double_t fTBinSize;
619  Double_t fMinY;
620  Double_t fMaxY;
621  Double_t fMinX;
622  Double_t fMaxX;
623  Double_t fMinT;
624  Double_t fMaxT;
625  Double_t fDx;
626  Double_t fDxSq;
627  Double_t fDy;
628  Double_t fDySq;
629  Double_t fDt;
630  Double_t fDtSq;
632  Double_t fScatX;
633  Double_t fScatXSq;
634  Double_t fScatY;
635  Double_t fScatYSq;
636 
637 public:
638  std::set<Segment, SegmentComp> fSegments;
641 
642 protected:
643  Double_t fNofSigmasX;
644  Double_t fNofSigmasXSq;
645  Double_t fNofSigmasY;
646  Double_t fNofSigmasYSq;
647  char fStage;
648 };
649 
650 #endif /* STATION_H */
CbmBinnedStation::CreateSegmentsFromHits
void CreateSegmentsFromHits()
Definition: Station.h:593
CbmBinnedStation::SetScatX
void SetScatX(Double_t v)
Definition: Station.h:483
CbmBinnedStation::fDtSq
Double_t fDtSq
Definition: Station.h:630
CbmBinnedStation::SetMinZ
void SetMinZ(Double_t v)
Definition: Station.h:437
CbmTrackParam2::GetTime
Double_t GetTime() const
Definition: CbmTrackParam2.h:70
CbmBinnedStation::Segment
Definition: Station.h:31
CbmBinnedStation::fStage
char fStage
Definition: Station.h:647
CbmBinnedStation::SetDt
void SetDt(Double_t v)
Definition: Station.h:473
CbmBinnedStation::Segment::chiSq
Double_t chiSq
Definition: Station.h:34
CbmBinnedStation::KFStation
Definition: Station.h:71
CbmBinnedStation::AddHit
virtual void AddHit(ECbmModuleId type, const CbmPixelHit *hit, Int_t index)=0
CbmPixelHit::GetDxy
Double_t GetDxy() const
Definition: CbmPixelHit.h:87
CbmBinnedStation::fDx
Double_t fDx
Definition: Station.h:625
CbmTrackParam2.h
CbmPixelHit::GetX
Double_t GetX() const
Definition: CbmPixelHit.h:83
CbmBinnedStation::fMinX
Double_t fMinX
Definition: Station.h:621
CbmBinnedStation::KFStation::Q::Q21
Double_t Q21
Definition: Station.h:73
CbmBinnedStation::SetDx
void SetDx(Double_t v)
Definition: Station.h:455
CbmBinnedStation::GetScatX
Double_t GetScatX() const
Definition: Station.h:480
CbmBinnedStation::GetNofSigmaYSq
Double_t GetNofSigmaYSq() const
Definition: Station.h:505
CbmPixelHit::GetY
Double_t GetY() const
Definition: CbmPixelHit.h:84
CbmBinnedStation::fNofSigmasXSq
Double_t fNofSigmasXSq
Definition: Station.h:644
cbmBinnedSigma
const Double_t cbmBinnedSigma
Definition: Station.h:24
sqrt
friend F32vec4 sqrt(const F32vec4 &a)
Definition: L1/vectors/P4_F32vec4.h:41
CbmPixelHit::GetDx
Double_t GetDx() const
Definition: CbmPixelHit.h:85
CbmBinnedStation::SetNofSigmaY
void SetNofSigmaY(Double_t v)
Definition: Station.h:507
CbmBinnedStation::fDefaultUse
bool fDefaultUse
Definition: Station.h:631
CbmBinnedStation::SetDy
void SetDy(Double_t v)
Definition: Station.h:464
CbmBinnedStation::fDt
Double_t fDt
Definition: Station.h:629
CbmBinnedStation::GetXInd
int GetXInd(Double_t v) const
Definition: Station.h:512
CbmBinnedStation::fScatYSq
Double_t fScatYSq
Definition: Station.h:635
CbmBinnedStation::GetMinZ
Double_t GetMinZ() const
Definition: Station.h:435
CbmBinnedStation::KFStation::Q
Definition: Station.h:72
cbmBinnedSigmaSq
const Double_t cbmBinnedSigmaSq
Definition: Station.h:25
CbmBinnedStation::SetMaxX
void SetMaxX(Double_t v)
Definition: Station.h:442
i
int i
Definition: L1/vectors/P4_F32vec4.h:25
CbmBinnedStation::SegmentComp
Definition: Station.h:48
CbmBinnedStation::fScatX
Double_t fScatX
Definition: Station.h:632
CbmBinnedStation::fNofSigmasX
Double_t fNofSigmasX
Definition: Station.h:643
CbmBinnedStation::KFStation::qs
Q qs[2]
Definition: Station.h:76
ECbmModuleId
ECbmModuleId
Definition: CbmDefs.h:33
CbmBinnedStation::GetDt
Double_t GetDt() const
Definition: Station.h:471
CbmBinnedStation::SearchHits
virtual void SearchHits(Double_t minZ, Double_t maxZ, Double_t minY, Double_t maxY, Double_t minX, Double_t maxX, Double_t minT, Double_t maxT, std::function< void(CbmTBin::HitHolder &)> handleHit)=0
CbmBinnedStation::KFStation::Q::Q22
Double_t Q22
Definition: Station.h:73
CbmPixelHit::GetDy
Double_t GetDy() const
Definition: CbmPixelHit.h:86
CbmBinnedStation::fYBinSize
Double_t fYBinSize
Definition: Station.h:616
CbmBinnedStation::GetNofSigmaXSq
Double_t GetNofSigmaXSq() const
Definition: Station.h:497
CbmHit::GetTimeError
Double_t GetTimeError() const
Definition: CbmHit.h:76
CbmBinnedStation::fDy
Double_t fDy
Definition: Station.h:627
CbmBinnedStation::Init
virtual void Init()
Definition: Station.h:547
CbmBinnedStation::Extrapolate
CbmTrackParam2 Extrapolate(const CbmTrackParam2 &parIn, Double_t zOut)
Definition: Station.h:95
CbmBinnedStation::SetNofSigmaX
void SetNofSigmaX(Double_t v)
Definition: Station.h:499
CbmBinnedStation::GetScatY
Double_t GetScatY() const
Definition: Station.h:488
CbmBinnedStation::fXBinSize
Double_t fXBinSize
Definition: Station.h:617
CbmBinnedStation::fNofSigmasY
Double_t fNofSigmasY
Definition: Station.h:645
CbmBinnedStation::IterateHits
virtual void IterateHits(std::function< void(CbmTBin::HitHolder &)> handleHit)=0
CbmBinnedStation::SearchHits
virtual void SearchHits(const CbmTrackParam2 &stateVec, Double_t stateZ, std::function< void(CbmTBin::HitHolder &)> handleHit)=0
CbmBinnedStation::fNofYBins
int fNofYBins
Definition: Station.h:613
CbmBinnedStation::IterateSegments
void IterateSegments(std::function< void(Segment &)> handleSegment)
Definition: Station.h:586
CbmBinnedStation::KFStation::Q::Q12
Double_t Q12
Definition: Station.h:73
CbmBinnedStation::Segment::children
std::list< Segment * > children
Definition: Station.h:35
CbmBinnedStation::Segment::operator=
Segment & operator=(const Segment &)=default
CbmBinnedStation::fMinY
Double_t fMinY
Definition: Station.h:619
CbmBinnedStation
Definition: Station.h:29
CbmTrackParam2::SetTime
void SetTime(Double_t time)
Definition: CbmTrackParam2.h:71
CbmTBin::HitHolder
Definition: Bins.h:27
CbmBinnedStation::~CbmBinnedStation
virtual ~CbmBinnedStation()
Definition: Station.h:433
CbmHit::GetTime
Double_t GetTime() const
Definition: CbmHit.h:75
CbmBinnedStation::GetNofSigmaX
Double_t GetNofSigmaX() const
Definition: Station.h:496
CbmBinnedStation::Update
static void Update(CbmTrackParam2 &par, const CbmPixelHit *hit, Double_t &chiSq)
Definition: Station.h:194
CbmBinnedStation::Segment::bestBranch
Segment * bestBranch
Definition: Station.h:36
CbmBinnedStation::SetMinY
void SetMinY(Double_t v)
Definition: Station.h:439
CbmBinnedStation::GetNofSigmaY
Double_t GetNofSigmaY() const
Definition: Station.h:504
CbmBinnedStation::fScatXSq
Double_t fScatXSq
Definition: Station.h:633
CbmBinnedStation::fMaxY
Double_t fMaxY
Definition: Station.h:620
CbmBinnedStation::SetStage
void SetStage(char v)
Definition: Station.h:545
CbmBinnedStation::fDySq
Double_t fDySq
Definition: Station.h:628
CbmBinnedStation::SetMaxZ
void SetMaxZ(Double_t v)
Definition: Station.h:438
CbmBinnedStation::fDxSq
Double_t fDxSq
Definition: Station.h:626
CbmBinnedStation::GetDx
Double_t GetDx() const
Definition: Station.h:453
CbmBinnedStation::KFStation::Q::Q11
Double_t Q11
Definition: Station.h:73
CbmBinnedStation::GetDy
Double_t GetDy() const
Definition: Station.h:462
HitReader.h
CbmBinnedStation::fMaxZ
Double_t fMaxZ
Definition: Station.h:612
CbmBinnedStation::NulifySegments
void NulifySegments()
Definition: Station.h:600
CbmTrackParam2
Definition: CbmTrackParam2.h:68
CbmBinnedStation::fTBinSize
Double_t fTBinSize
Definition: Station.h:618
CbmBinnedStation::fMinZ
Double_t fMinZ
Definition: Station.h:611
cbmBinnedCrazyChiSq
const Double_t cbmBinnedCrazyChiSq
Definition: Station.h:27
CbmBinnedStation::GetMaxZ
Double_t GetMaxZ() const
Definition: Station.h:436
CbmBinnedStation::fNofSigmasYSq
Double_t fNofSigmasYSq
Definition: Station.h:646
CbmBinnedStation::fScatY
Double_t fScatY
Definition: Station.h:634
CbmBinnedStation::SetDefaultUse
void SetDefaultUse()
Definition: Station.h:451
CbmBinnedStation::operator=
CbmBinnedStation & operator=(const CbmBinnedStation &)=delete
CbmBinnedStation::fNofXBins
int fNofXBins
Definition: Station.h:614
CbmBinnedStation::SetMinT
void SetMinT(Double_t v)
Definition: Station.h:446
CbmBinnedStation::GetTInd
int GetTInd(Double_t v) const
Definition: Station.h:534
v
__m128 v
Definition: L1/vectors/P4_F32vec4.h:1
CbmBinnedStation::fNofTBins
int fNofTBins
Definition: Station.h:615
CbmBinnedStation::GetYInd
int GetYInd(Double_t v) const
Definition: Station.h:523
CbmBinnedStation::fVertexBin
CbmTBin fVertexBin
Definition: Station.h:639
CbmBinnedStation::Segment::end
CbmTBin::HitHolder * end
Definition: Station.h:33
CbmBinnedStation::SetScatY
void SetScatY(Double_t v)
Definition: Station.h:491
CbmBinnedStation::fVertexHolder
CbmTBin::HitHolder fVertexHolder
Definition: Station.h:640
CbmBinnedStation::SearchHits
virtual void SearchHits(Segment &segment, std::function< void(CbmTBin::HitHolder &)> handleHit)=0
CbmBinnedStation::GetStationType
ECbmModuleId GetStationType() const
Definition: Station.h:434
CbmBinnedStation::SegmentComp::operator()
bool operator()(const Segment &s1, const Segment &s2) const
Definition: Station.h:49
cbmBinnedSOL
Double_t cbmBinnedSOL
Definition: GeoReader.cxx:107
CbmPixelHit
Definition: CbmPixelHit.h:21
CbmBinnedStation::CbmBinnedStation
CbmBinnedStation(const CbmBinnedStation &)=delete
CbmTBin::HitHolder::stage
char stage
Definition: Bins.h:34
CbmBinnedStation::fStationType
ECbmModuleId fStationType
Definition: Station.h:610
CbmBinnedStation::SetMaxY
void SetMaxY(Double_t v)
Definition: Station.h:440
CbmBinnedStation::SetMinX
void SetMinX(Double_t v)
Definition: Station.h:441
CbmBinnedStation::fSegments
std::set< Segment, SegmentComp > fSegments
Definition: Station.h:638
CbmBinnedStation::fMinT
Double_t fMinT
Definition: Station.h:623
max
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
Definition: L1/vectors/P4_F32vec4.h:36
CbmBinnedStation::SetTBinSize
void SetTBinSize(Double_t v)
Definition: Station.h:444
Bins.h
CbmTBin
Definition: Bins.h:25
CbmBinnedStation::Clear
virtual void Clear()
Definition: Station.h:552
CbmBinnedStation::GetScatXSq
Double_t GetScatXSq() const
Definition: Station.h:481
CbmBinnedStation::Segment::Segment
Segment(const Segment &)=default
CbmBinnedStation::GetScatYSq
Double_t GetScatYSq() const
Definition: Station.h:489
CbmBinnedStation::fMaxT
Double_t fMaxT
Definition: Station.h:624
CbmBinnedStation::fMaxX
Double_t fMaxX
Definition: Station.h:622
CbmBinnedStation::Segment::Segment
Segment(CbmTBin::HitHolder *beginHit, CbmTBin::HitHolder *endHit)
Definition: Station.h:38
CbmBinnedStation::Segment::begin
CbmTBin::HitHolder * begin
Definition: Station.h:32
CbmBinnedStation::CbmBinnedStation
CbmBinnedStation(ECbmModuleId stationType, Double_t minZ, Double_t maxZ, int nofYBins, int nofXBins, int nofTBins)
Definition: Station.cxx:9