CbmRoot
CbmKF.cxx
Go to the documentation of this file.
1 #include "CbmKF.h"
2 
3 #include "CbmKFFieldMath.h"
4 #include "CbmKFHit.h"
5 #include "CbmKFMath.h"
6 
7 #include "CbmDefs.h"
8 #include "CbmMvdDetector.h"
9 #include "CbmMvdStationPar.h"
10 #include "FairBaseParSet.h"
11 #include "FairField.h"
12 #include "FairGeoNode.h"
13 #include "FairRunAna.h"
14 
15 #include "CbmStsSetup.h"
16 #include "CbmStsStation.h"
17 
18 #include "CbmDigiManager.h"
19 #include "FairRuntimeDb.h"
20 
21 #include "TGeoManager.h"
22 #include "TGeoMaterial.h"
23 #include "TGeoMatrix.h"
24 #include "TGeoNode.h"
25 #include "TGeoShape.h"
26 #include "TGeoTube.h"
27 #include "TGeoVolume.h"
28 #include "TObjArray.h"
29 #include "TString.h"
30 
31 #include <cmath>
32 #include <iostream>
33 #include <list>
34 #include <map>
35 #include <vector>
36 
37 using std::cout;
38 using std::endl;
39 using std::fabs;
40 using std::map;
41 using std::pair;
42 using std::vector;
43 
44 
46 
48 
49 CbmKF::CbmKF(const char* name, Int_t iVerbose)
50  : FairTask(name, iVerbose)
51  , vMaterial()
52  ,
53 
54  vMvdMaterial()
55  , vStsMaterial()
56  , vMuchMaterial()
57  , vMuchDetectors()
58  , vRichMaterial()
59  , vTrdMaterial()
60  , vTargets()
61  , vPipe()
62  ,
63 
64  vPassiveTube()
65  , vPassiveWall()
66  , vPassiveBox()
67  ,
68 
69  MvdStationIDMap()
70  , StsStationIDMap()
71  , TrdStationIDMap()
72  , MuchMCID2StationMap()
73  , MuchStation2MCIDMap()
74  ,
75 
76  fMagneticField(0)
77  , fMethod(1)
78  , fMaterialID2IndexMap() {
79  if (!fInstance) fInstance = this;
80 }
81 
83 
85  FairRunAna* ana = FairRunAna::Instance();
86  FairRuntimeDb* rtdb = ana->GetRuntimeDb();
87  rtdb->getContainer("FairBaseParSet");
88  rtdb->getContainer("CbmFieldPar");
89 }
90 
91 InitStatus CbmKF::ReInit() { return Init(); }
92 
93 InitStatus CbmKF::Init() {
94  if (
96  ->IsInit()) //TODO remove initialisation when the problem will be resolved globaly
98 
99  fMagneticField = 0;
100 
101  vMvdMaterial.clear();
102  vStsMaterial.clear();
103  vTrdMaterial.clear();
104  vRichMaterial.clear();
105  vMuchMaterial.clear();
106  vMuchDetectors.clear();
107  vPipe.clear();
108  vTargets.clear();
109  vPassiveTube.clear();
110  vPassiveWall.clear();
111  vPassiveBox.clear();
112  vMaterial.clear();
113 
114  StsStationIDMap.clear();
115  TrdStationIDMap.clear();
116  MvdStationIDMap.clear();
117  MuchMCID2StationMap.clear();
118  MuchStation2MCIDMap.clear();
119 
120  fMaterialID2IndexMap.clear();
121 
122  FairRunAna* Run = FairRunAna::Instance();
123  //FairRuntimeDb *RunDB = Run->GetRuntimeDb(); (VF) not used
124 
125  if (fVerbose) cout << "KALMAN FILTER : === INIT MAGNETIC FIELD ===" << endl;
126 
127  fMagneticField = reinterpret_cast<FairField*>(Run->GetField());
128  if (fVerbose && fMagneticField) cout << "Magnetic field done" << endl;
129 
130  if (!fMagneticField) cout << "No Magnetic Field Found" << endl;
131 
132 
134  // fill vector of material
135 
136  //=== Mvd ===
137 
139  digiMan->Init();
141  if (useMVD) {
142  CbmMvdDetector* mvdDetector = CbmMvdDetector::Instance();
143  if (mvdDetector) {
144  CbmMvdStationPar* mvdStationPar = mvdDetector->GetParameterFile();
145  assert(mvdStationPar);
146 
147  if (fVerbose) cout << "KALMAN FILTER : === READ MVD MATERIAL ===" << endl;
148 
149  int NStations = mvdStationPar->GetStationCount();
150 
151  for (Int_t ist = 0; ist < NStations; ist++) {
152  CbmKFTube tube;
153 
154  tube.ID = 1101 + ist;
155  // tube.F = 1.;
156  tube.z = mvdStationPar->GetZPosition(ist);
157  tube.dz = mvdStationPar->GetThickness(ist);
158  tube.RadLength = 100 * tube.dz / mvdStationPar->GetRadLength(ist);
159  tube.r = std::min(mvdStationPar->GetBeamHeight(ist),
160  mvdStationPar->GetBeamWidth(ist));
161  tube.R =
162  std::max(mvdStationPar->GetHeight(ist), mvdStationPar->GetWidth(ist));
163  tube.rr = tube.r * tube.r;
164  tube.RR = tube.R * tube.R;
165  tube.ZThickness = tube.dz;
166  tube.ZReference = tube.z;
167 
168  vMvdMaterial.push_back(tube);
169  MvdStationIDMap.insert(pair<Int_t, Int_t>(tube.ID, ist));
170 
171  if (fVerbose)
172  cout << " Mvd material ( id, z, dz, r, R, RadL, dz/RadL )= ( "
173  << tube.ID << ", " << tube.z << ", " << tube.dz << ", " << tube.r
174  << ", " << tube.R << ", " << tube.RadLength << ", "
175  << tube.dz / tube.RadLength << " )" << endl;
176  }
177  }
178  }
179 
180 
181  //=== Sts stations ===
182 
183  if (fVerbose) cout << "KALMAN FILTER : === READ STS MATERIAL ===" << endl;
184 
186 
187  for (Int_t ist = 0; ist < NStations; ist++) {
189 
190  if (!station) continue;
191 
192  CbmKFTube tube;
193 
194  tube.ID = 1000 + ist;
195  tube.F = 1.;
196  tube.z = station->GetZ();
197  tube.dz = station->GetSensorD();
198  tube.RadLength = station->GetRadLength();
199  tube.r = 0;
200  tube.R = station->GetYmax() < station->GetXmax() ? station->GetXmax()
201  : station->GetYmax();
202  tube.rr = tube.r * tube.r;
203  tube.RR = tube.R * tube.R;
204  tube.ZThickness = tube.dz;
205  tube.ZReference = tube.z;
206 
207  vStsMaterial.push_back(tube);
208  StsStationIDMap.insert(pair<Int_t, Int_t>(tube.ID, ist));
209 
210  if (fVerbose)
211  cout << " Sts material ( id, z, dz, r, R, RadL, dz/RadL )= ( " << tube.ID
212  << ", " << tube.z << ", " << tube.dz << ", " << tube.r << ", "
213  << tube.R << ", " << tube.RadLength << ", "
214  << tube.dz / tube.RadLength << " )" << endl;
215  }
216 
217  // FU 05.03.2020
218  // Remove the usage of old ascii parameter containers. Since the
219  // containers were empty anyway there is no change of the behaviour
220  // The change was tested by Iour Vassiliev (see Redmine Issue #1566)
221  // and no difference of the results was seen. This at least holds for
222  // the STS/MVD system.
223 
224 
225  // FU 25.05.2020
226  // Reimplement initializing the target information. After shifting the
227  // target 4 cm upstream it was found that the KF package assumes the
228  // target at (0.,0.,0.). In ancient times the target information was
229  // initialized from the ascii parameter container. After the target
230  // geometry was changed to ROOT geometry the information was not
231  // initialized. Probably this never was a problem since the target was at
232  // z=0. cm anyway.
233  // Now the target information s properly initialized from the ROOT GeoManager.
234  // Fixes Redmine issues #1727 and #1718
235 
236  GetTargetInfo();
237 
238 
239  {
240  for (vector<CbmKFTube>::iterator i = vTargets.begin(); i != vTargets.end();
241  ++i) {
242  vMaterial.push_back(&*i);
243  }
244 
245  for (vector<CbmKFTube>::iterator i = vMvdMaterial.begin();
246  i != vMvdMaterial.end();
247  ++i) {
248  vMaterial.push_back(&*i);
249  }
250 
251  for (vector<CbmKFTube>::iterator i = vStsMaterial.begin();
252  i != vStsMaterial.end();
253  ++i) {
254  vMaterial.push_back(&*i);
255  }
256  sort(vMaterial.begin(), vMaterial.end(), CbmKFMaterial::comparePDown);
257  for (unsigned i = 0; i < vMaterial.size(); i++) {
258  fMaterialID2IndexMap.insert(pair<Int_t, Int_t>(vMaterial[i]->ID, i));
259  }
260  }
261  return kSUCCESS;
262 }
263 
265  // Loop over all nodes till a node with name "target" is found
266  // Extract the required infrmation from the node and store it in the
267  // proper structure
268  // The complete logic depends on the naming convention of the target.
269  // If the node doesn't contain the string target the procedure will fail
270  TGeoNode* topNode = gGeoManager->GetTopNode();
271 
272  TObjArray* nodes = topNode->GetNodes();
273 
274  loop_over_nodes(nodes);
275 
276  CbmKFTube target {};
277  target.ID = -111;
278  target.F = 1.;
279 
280  if (fTarget) {
281  TGeoMatrix* matrix = fTarget->GetMatrix();
282  const Double_t* translation = matrix->GetTranslation();
283  target.x = translation[0];
284  target.y = translation[1];
285  target.z = translation[2];
286 
287  TGeoVolume* volume = fTarget->GetVolume();
288 
289  TGeoShape* shape = volume->GetShape();
290  if (shape->TestShapeBit(TGeoShape::kGeoTube)) {
291  target.r = static_cast<TGeoTube*>(shape)->GetRmin();
292  target.R = static_cast<TGeoTube*>(shape)->GetRmax();
293  target.dz = 2. * static_cast<TGeoTube*>(shape)->GetDz();
294  } else {
295  LOG(fatal) << "Only a target of a tube shape is supported";
296  }
297 
298  TGeoMaterial* material = volume->GetMaterial();
299  Double_t radlength = material->GetRadLen();
300  target.RadLength = radlength;
301  target.Fe = 0.02145;
302 
303  target.rr = target.r * target.r;
304  target.RR = target.R * target.R;
305  target.ZThickness = target.dz;
306  target.ZReference = target.z;
307 
308  vTargets.push_back(target);
309  LOG(info) << "Target info: " << target.KFInfo();
310  } else {
311  LOG(fatal) << "Could not find the target.";
312  }
313 }
314 
315 void CbmKF::loop_over_nodes(TObjArray* nodes) {
316  for (Int_t iNode = 0; iNode < nodes->GetEntriesFast(); iNode++) {
317  TGeoNode* node = static_cast<TGeoNode*>(nodes->At(iNode));
318  TString nodeName = node->GetName();
319  if (nodeName.Contains("target")) {
320  fTarget = node;
321  break;
322  }
323  TObjArray* subnodes = node->GetNodes();
324  if (nullptr != subnodes) { loop_over_nodes(subnodes); }
325  }
326 }
327 
328 Int_t CbmKF::GetMaterialIndex(Int_t uid) {
329  map<Int_t, Int_t>::iterator i = fMaterialID2IndexMap.find(uid);
330  if (i != fMaterialID2IndexMap.end()) { return i->second; }
331  return -1;
332 }
333 
334 
335 Int_t CbmKF::ReadTube(CbmKFTube& tube, FairGeoNode* node) {
336 
337  if (!node) return 1;
338 
339  TString name = node->getName();
340  TString Sname = node->getShapePointer()->GetName();
341  FairGeoVector nodeV = node->getLabTransform()->getTranslation(); //in cm
342  FairGeoVector centerV = node->getCenterPosition().getTranslation();
343  TArrayD* P = node->getParameters();
344  Int_t NP = node->getShapePointer()->getNumParam();
345  FairGeoMedium* material = node->getMedium();
346  material->calcRadiationLength();
347 
348  tube.ID = node->getMCid();
349  tube.RadLength = material->getRadiationLength();
350  tube.F = 1.;
351 
352  tube.Fe = 0.02145;
353  TString Mname = material->GetName();
354  if (Mname == "MUCHWolfram") {
355  tube.Fe = 0.009029;
356  } else if (Mname == "MUCHiron") {
357  tube.Fe = 0.02219;
358  } else if (Mname == "carbon") {
359  tube.Fe = 0.08043;
360  }
361 
362  tube.x = nodeV.X() + centerV.X();
363  tube.y = nodeV.Y() + centerV.Y();
364  tube.z = nodeV.Z() + centerV.Z();
365  /*
366  int np = node->getNumPoints();
367  cout<<"points:"<<endl;
368  for( int i=0; i<np; i++ ){
369  FairGeoVector *v = node->getPoint(i);
370  cout<<v->X()<<" "<<v->Y()<<" "<<v->Z()<<endl;
371  }
372  */
373  if (Sname == "TUBS" || Sname == "TUBE") {
374  tube.r = P->At(0);
375  tube.R = P->At(1);
376  tube.dz = 2. * P->At(2);
377  } else if (Sname == "TRAP") {
378  tube.r = 0;
379  tube.R = 1000;
380  tube.dz = 2. * P->At(0);
381  } else if (Sname == "SPHE") {
382  tube.r = 0;
383  tube.R = 1000;
384  tube.z += 0.5 * (P->At(0) + P->At(1)); // inner & outer radius
385  tube.dz = (P->At(1) - P->At(0));
386  } else if (Sname == "PCON") {
387  Int_t Nz = (NP - 3) / 3;
388  double Z = -100000, R = -100000, z = 100000, r = 100000;
389  for (Int_t i = 0; i < Nz; i++) {
390  double z1 = P->At(3 + i * 3 + 0);
391  double r1 = P->At(3 + i * 3 + 1);
392  double R1 = P->At(3 + i * 3 + 2);
393  if (r1 < r) r = r1;
394  if (R1 > R) R = R1;
395  if (z1 < z) z = z1;
396  if (z1 > Z) Z = z1;
397  }
398 
399  tube.r = r;
400  tube.R = R;
401  tube.z += (z + Z) / 2.;
402  tube.dz = (Z - z);
403  } else if (Sname == "PGON") {
404  Int_t Nz = (NP - 4) / 3;
405  double Z = -100000, R = -100000, z = 100000, r = 100000;
406  for (Int_t i = 0; i < Nz; i++) {
407  double z1 = P->At(4 + i * 3 + 0);
408  double r1 = P->At(4 + i * 3 + 1);
409  double R1 = P->At(4 + i * 3 + 2);
410  if (r1 < r) r = r1;
411  if (R1 > R) R = R1;
412  if (z1 < z) z = z1;
413  if (z1 > Z) Z = z1;
414  }
415  tube.r = r;
416  tube.R = R;
417  tube.z += (z + Z) / 2.;
418  tube.dz = (Z - z);
419  } else if (Sname == "BOX ") {
420  double dx = 2 * P->At(0);
421  double dy = 2 * P->At(1);
422  double dz = 2 * P->At(2);
423  tube.r = 0;
424  tube.R = TMath::Sqrt(dx * dx + dy * dy);
425  tube.dz = dz;
426  } else {
427  cout << " -E- unknown shape : " << Sname << endl;
428  cout << " -E- It does not make sense to go on" << endl;
429  cout << " -E- Stop execution here" << endl;
430  Fatal("CbmKF::ReadTube", "Unknown Shape");
431  }
432  tube.rr = tube.r * tube.r;
433  tube.RR = tube.R * tube.R;
434  tube.ZThickness = tube.dz;
435  tube.ZReference = tube.z;
436  return 0;
437 }
438 
439 
440 CbmKFMaterial* CbmKF::ReadPassive(FairGeoNode* node) {
441 
442  if (!node) return 0;
443 
444  TString name = node->getName();
445  TString Sname = node->getShapePointer()->GetName();
446 
447  FairGeoTransform trans(*node->getLabTransform());
448  FairGeoNode* nxt = node;
449  while ((nxt = nxt->getMotherNode())) {
450  FairGeoTransform* tm = nxt->getLabTransform();
451  if (!tm) break;
452  trans.transFrom(*tm);
453  }
454 
455  //FairGeoVector nodeV = node->getLabTransform()->getTranslation(); //in cm
456  //FairGeoVector centerV = node->getCenterPosition().getTranslation();
457 
458  FairGeoVector nodeV = trans.getTranslation(); //in cm
459  FairGeoVector centerV = nodeV + node->getCenterPosition().getTranslation();
460 
461  TArrayD* P = node->getParameters();
462  Int_t NP = node->getShapePointer()->getNumParam();
463  FairGeoMedium* material = node->getMedium();
464  material->calcRadiationLength();
465 
466  Int_t ID = node->getMCid();
467  Double_t RadLength = material->getRadiationLength();
468  // Double_t F = 1.;
469  Double_t x0 = centerV.X();
470  Double_t y0 = centerV.Y();
471  Double_t z0 = centerV.Z();
472 
473  CbmKFMaterial* ret = 0;
474 
475  if (Sname == "TUBS" || Sname == "TUBE") {
476  CbmKFTube tube(
477  ID, x0, y0, z0, 2. * P->At(2), P->At(0), P->At(1), RadLength);
478  vPassiveTube.push_back(tube);
479  ret = &(vPassiveTube.back());
480  } else if (Sname == "SPHE") {
481  CbmKFTube tube(ID,
482  x0,
483  y0,
484  z0 + 0.5 * (P->At(0) + P->At(1)),
485  (P->At(1) - P->At(0)),
486  0,
487  1000,
488  RadLength);
489  vPassiveTube.push_back(tube);
490  ret = &(vPassiveTube.back());
491  } else if (Sname == "PCON") {
492  Int_t Nz = (NP - 3) / 3;
493  double Z = -100000, R = -100000, z = 100000, r = 100000;
494  for (Int_t i = 0; i < Nz; i++) {
495  double z1 = P->At(3 + i * 3 + 0);
496  double r1 = P->At(3 + i * 3 + 1);
497  double R1 = P->At(3 + i * 3 + 2);
498  if (r1 < r) r = r1;
499  if (R1 > R) R = R1;
500  if (z1 < z) z = z1;
501  if (z1 > Z) Z = z1;
502  }
503  CbmKFTube tube(ID, x0, y0, z0 + 0.5 * (z + Z), (Z - z), r, R, RadLength);
504  vPassiveTube.push_back(tube);
505  ret = &(vPassiveTube.back());
506  } else if (Sname == "PGON") {
507  Int_t Nz = (NP - 4) / 3;
508  double Z = -100000, R = -100000, z = 100000, r = 100000;
509  for (Int_t i = 0; i < Nz; i++) {
510  double z1 = P->At(4 + i * 3 + 0);
511  double r1 = P->At(4 + i * 3 + 1);
512  double R1 = P->At(4 + i * 3 + 2);
513  if (r1 < r) r = r1;
514  if (R1 > R) R = R1;
515  if (z1 < z) z = z1;
516  if (z1 > Z) Z = z1;
517  }
518  CbmKFTube tube(ID, x0, y0, z0 + 0.5 * (z + Z), (Z - z), r, R, RadLength);
519  vPassiveTube.push_back(tube);
520  ret = &(vPassiveTube.back());
521  } else if (Sname == "BOX ") {
522  CbmKFBox box(
523  ID, x0, y0, z0, 2 * P->At(0), 2 * P->At(1), 2 * P->At(2), RadLength);
524  vPassiveBox.push_back(box);
525  ret = &(vPassiveBox.back());
526  } else if (Sname == "TRAP") {
527  int np = node->getNumPoints();
528  FairGeoVector vMin = *node->getPoint(0), vMax = vMin;
529  for (int i = 0; i < np; i++) {
530  FairGeoVector* v = node->getPoint(i);
531  for (int j = 0; j < 3; j++) {
532  if (vMin(j) > (*v)(j)) (&vMin.X())[j] = (*v)(j);
533  if (vMax(j) < (*v)(j)) (&vMax.X())[j] = (*v)(j);
534  }
535  }
536  FairGeoVector v0 = (vMin + vMax);
537  v0 *= .5 / 10.;
538  FairGeoVector dv = vMax - vMin;
539  dv /= 10.;
540  CbmKFBox box(
541  ID, x0 + v0(0), y0 + v0(1), z0 + v0(2), dv(0), dv(1), dv(2), RadLength);
542  vPassiveBox.push_back(box);
543  ret = &(vPassiveBox.back());
544  } else {
545  cout << " -E- unknown shape : " << Sname << endl;
546  cout << " -E- It does not make sense to go on" << endl;
547  cout << " -E- Stop execution here" << endl;
548  Fatal("CbmKF::ReadPassive", "Unknown Shape");
549  }
550  return ret;
551 }
552 
553 
554 Int_t CbmKF::Propagate(Double_t* T, Double_t* C, Double_t z_out, Double_t QP0) {
555  Bool_t err = 0;
556  if (fabs(T[5] - z_out) < 1.e-5) return 0;
557 
558  if (!fMagneticField || (300 <= z_out && 300 <= T[5])) {
559  CbmKFFieldMath::ExtrapolateLine(T, C, T, C, z_out);
560  return 0;
561  }
562  Double_t zz = z_out;
563  if (z_out < 300. && 300 <= T[5])
564  CbmKFFieldMath::ExtrapolateLine(T, C, T, C, 300.);
565 
566  if (T[5] < 300. && 300. < z_out) { zz = 300.; }
567  Bool_t repeat = 1;
568  while (!err && repeat) {
569  const Double_t max_step = 5.;
570  Double_t zzz;
571  if (fabs(T[5] - zz) > max_step)
572  zzz = T[5] + ((zz > T[5]) ? max_step : -max_step);
573  else {
574  zzz = zz;
575  repeat = 0;
576  }
577  switch (fMethod) {
578  case 0: {
579  CbmKFFieldMath::ExtrapolateLine(T, C, T, C, zzz);
580  break;
581  }
582  case 1: {
583  err = err
585  T, C, T, C, zzz, QP0, fMagneticField);
586  break;
587  }
588  case 2: {
589  err = err
591  T, C, T, C, zzz, QP0, fMagneticField);
592  break;
593  }
594  /*
595  case 3:
596  {
597  CbmKFFieldMath::ExtrapolateACentral( T, C, T, C, zzz , QP0, fMagneticField );
598  break;
599  }
600  case 4:
601  {
602  CbmKFFieldMath::ExtrapolateAnalytic( T, C, T, C, zzz , QP0, fMagneticField, 1 );
603  break;
604  }
605  case 5:
606  {
607  CbmKFFieldMath::ExtrapolateAnalytic( T, C, T, C, zzz , QP0, fMagneticField, 2 );
608  break;
609  }
610  case 6:
611  {
612  CbmKFFieldMath::ExtrapolateAnalytic( T, C, T, C, zzz , QP0, fMagneticField, 3 );
613  break;
614  }
615  */
616  }
617  }
618  if (T[5] != z_out) CbmKFFieldMath::ExtrapolateLine(T, C, T, C, z_out);
619  return err;
620 }
621 
623  Double_t& QP0,
624  Int_t ifst,
625  Int_t ilst) {
626  Bool_t downstream = (ilst > ifst);
627  Bool_t err = 0;
628  Int_t iend = downstream ? ilst + 1 : ilst - 1;
629  for (Int_t i = ifst; i != iend; downstream ? ++i : --i) {
630  err = err || vMaterial[i]->Pass(track, downstream, QP0);
631  }
632  return err;
633 }
634 
636  Double_t& QP0,
637  Int_t ifst,
638  Int_t ilst) {
639  Bool_t downstream = (ilst > ifst);
640  Bool_t err = 0;
641  Int_t istart = downstream ? ifst + 1 : ifst - 1;
642  for (Int_t i = istart; i != ilst; downstream ? ++i : --i) {
643  err = err || vMaterial[i]->Pass(track, downstream, QP0);
644  }
645  return err;
646 }
647 
649  Double_t& QP0,
650  CbmKFHit* fst,
651  CbmKFHit* lst) {
652  return PassMaterialBetween(
653  track, QP0, fst->MaterialIndex, lst->MaterialIndex);
654 }
CbmMvdDetector::Instance
static CbmMvdDetector * Instance()
Definition: CbmMvdDetector.cxx:47
CbmKF::vRichMaterial
std::vector< CbmKFTube > vRichMaterial
Definition: CbmKF.h:77
CbmKFBox
Definition: CbmKFMaterial.h:104
CbmKF::MuchStation2MCIDMap
std::map< Int_t, Int_t > MuchStation2MCIDMap
Definition: CbmKF.h:94
CbmStsStation::GetZ
Double_t GetZ() const
Definition: CbmStsStation.h:127
CbmKF::vPassiveBox
std::vector< CbmKFBox > vPassiveBox
Definition: CbmKF.h:84
CbmKFTube::z
Double_t z
Definition: CbmKFMaterial.h:92
CbmKF::ReadTube
Int_t ReadTube(CbmKFTube &tube, FairGeoNode *node)
Definition: CbmKF.cxx:335
CbmMvdDetector.h
CbmKFTube::RR
Double_t RR
Definition: CbmKFMaterial.h:93
CbmKFFieldMath::ExtrapolateRK4
static Int_t ExtrapolateRK4(const Double_t T_in[], const Double_t C_in[], Double_t T_out[], Double_t C_out[], Double_t z_out, Double_t qp0, FairField *MF)
Definition: CbmKFFieldMath.cxx:61
CbmKF::vPipe
std::vector< CbmKFCone > vPipe
Definition: CbmKF.h:80
CbmStsStation::GetYmax
Double_t GetYmax() const
Definition: CbmStsStation.h:119
CbmKF.h
CbmMvdStationPar::GetZPosition
Double_t GetZPosition(Int_t stationNumber) const
Definition: CbmMvdStationPar.cxx:82
CbmMvdDetector::GetParameterFile
CbmMvdStationPar * GetParameterFile()
Definition: CbmMvdDetector.h:111
CbmKF::vPassiveTube
std::vector< CbmKFTube > vPassiveTube
Definition: CbmKF.h:82
CbmStsSetup.h
CbmDigiManager::Init
InitStatus Init()
Initialisation.
Definition: CbmDigiManager.cxx:71
CbmKF::Propagate
Int_t Propagate(Double_t *T, Double_t *C, Double_t z_out, Double_t QP0)
Definition: CbmKF.cxx:554
CbmKFFieldMath::ExtrapolateALight
static Int_t ExtrapolateALight(const Double_t T_in[], const Double_t C_in[], Double_t T_out[], Double_t C_out[], Double_t z_out, Double_t qp0, FairField *MF)
Definition: CbmKFFieldMath.cxx:1000
CbmKFHit
Definition: CbmKFHit.h:16
CbmKF::MuchMCID2StationMap
std::map< Int_t, Int_t > MuchMCID2StationMap
Definition: CbmKF.h:93
CbmKFMaterial::ZThickness
Double_t ZThickness
Definition: CbmKFMaterial.h:30
i
int i
Definition: L1/vectors/P4_F32vec4.h:25
CbmKF::GetMaterialIndex
Int_t GetMaterialIndex(Int_t uid)
Definition: CbmKF.cxx:328
CbmKFFieldMath.h
CbmKF::vTargets
std::vector< CbmKFTube > vTargets
Definition: CbmKF.h:79
CbmKF::MvdStationIDMap
std::map< Int_t, Int_t > MvdStationIDMap
Definition: CbmKF.h:90
CbmStsSetup::Instance
static CbmStsSetup * Instance()
Definition: CbmStsSetup.cxx:293
CbmStsStation.h
CbmKFMaterial::comparePDown
static Bool_t comparePDown(const CbmKFMaterial *a, const CbmKFMaterial *b)
Definition: CbmKFMaterial.h:54
CbmKF::fTarget
TGeoNode * fTarget
Definition: CbmKF.h:118
ECbmModuleId::kMvd
@ kMvd
Micro-Vertex Detector.
CbmKF::~CbmKF
~CbmKF()
Definition: CbmKF.cxx:82
CbmKF::fMethod
Int_t fMethod
Definition: CbmKF.h:106
CbmKF
Definition: CbmKF.h:33
CbmMvdStationPar::GetWidth
Double_t GetWidth(Int_t stationNumber) const
Definition: CbmMvdStationPar.cxx:117
CbmKF::vMvdMaterial
std::vector< CbmKFTube > vMvdMaterial
Definition: CbmKF.h:73
NStations
const int NStations
Definition: L1AlgoPulls.h:9
CbmKF::SetParContainers
void SetParContainers()
Definition: CbmKF.cxx:84
CbmKFFieldMath::ExtrapolateLine
static void ExtrapolateLine(const Double_t T_in[], const Double_t C_in[], Double_t T_out[], Double_t C_out[], Double_t z_out)
CbmKFTube::R
Double_t R
Definition: CbmKFMaterial.h:93
CbmKFMaterial
Definition: CbmKFMaterial.h:17
CbmDigiManager::IsPresent
static Bool_t IsPresent(ECbmModuleId systemId)
Presence of a digi branch.
Definition: CbmDigiManager.cxx:112
CbmDigiManager::Instance
static CbmDigiManager * Instance()
Static instance.
Definition: CbmDigiManager.h:93
min
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
Definition: L1/vectors/P4_F32vec4.h:33
CbmStsStation::GetRadLength
Double_t GetRadLength() const
Definition: CbmStsStation.h:60
CbmKFMaterial::F
Double_t F
Definition: CbmKFMaterial.h:32
CbmStsStation::GetSensorD
Double_t GetSensorD() const
Definition: CbmStsStation.h:72
CbmKFMath.h
CbmKFMaterial::ID
Int_t ID
Definition: CbmKFMaterial.h:26
CbmKF::vTrdMaterial
std::vector< CbmKFWall > vTrdMaterial
Definition: CbmKF.h:78
CbmKFHit::MaterialIndex
Int_t MaterialIndex
Definition: CbmKFHit.h:22
CbmKF::fMagneticField
FairField * fMagneticField
Definition: CbmKF.h:103
CbmKF::TrdStationIDMap
std::map< Int_t, Int_t > TrdStationIDMap
Definition: CbmKF.h:92
CbmMvdStationPar::GetThickness
Double_t GetThickness(Int_t stationNumber) const
Definition: CbmMvdStationPar.cxx:93
CbmKF::ReadPassive
CbmKFMaterial * ReadPassive(FairGeoNode *node)
Definition: CbmKF.cxx:440
CbmMvdStationPar::GetBeamWidth
Double_t GetBeamWidth(Int_t stationNumber) const
Definition: CbmMvdStationPar.cxx:178
CbmKFMaterial::RadLength
Double_t RadLength
Definition: CbmKFMaterial.h:31
CbmKF::PassMaterial
Int_t PassMaterial(CbmKFTrackInterface &track, Double_t &QP0, Int_t ifst, Int_t ilst)
Definition: CbmKF.cxx:622
CbmKF::vPassiveWall
std::vector< CbmKFWall > vPassiveWall
Definition: CbmKF.h:83
CbmMvdStationPar.h
CbmKFMaterial::ZReference
Double_t ZReference
Definition: CbmKFMaterial.h:29
CbmKF::vMaterial
std::vector< CbmKFMaterial * > vMaterial
Definition: CbmKF.h:71
CbmKFTube::rr
Double_t rr
Definition: CbmKFMaterial.h:93
CbmKF::CbmKF
CbmKF(const char *name="KF", Int_t iVerbose=1)
ClassImp
ClassImp(CbmConverterManager) InitStatus CbmConverterManager
Definition: CbmConverterManager.cxx:12
CbmDigiManager
CbmDigiManager.
Definition: CbmDigiManager.h:37
CbmKFTube::dz
Double_t dz
Definition: CbmKFMaterial.h:92
CbmStsSetup::Init
Bool_t Init(const char *geometryFile=nullptr)
Initialise the setup.
Definition: CbmStsSetup.cxx:201
CbmKFTube::x
Double_t x
Definition: CbmKFMaterial.h:92
CbmKFTube::r
Double_t r
Definition: CbmKFMaterial.h:93
CbmKF::vMuchDetectors
std::vector< CbmKFTube > vMuchDetectors
Definition: CbmKF.h:76
CbmKFTrackInterface
Definition: CbmKFTrackInterface.h:26
CbmKFTube::y
Double_t y
Definition: CbmKFMaterial.h:92
CbmMvdDetector
Definition: CbmMvdDetector.h:39
CbmStsSetup::GetStation
CbmStsStation * GetStation(Int_t stationId) const
Definition: CbmStsSetup.h:97
CbmKF::fMaterialID2IndexMap
std::map< Int_t, Int_t > fMaterialID2IndexMap
Definition: CbmKF.h:111
CbmKF::GetTargetInfo
void GetTargetInfo()
Definition: CbmKF.cxx:264
shape
UInt_t shape
Definition: CbmMvdSensorDigiToHitTask.cxx:73
v
__m128 v
Definition: L1/vectors/P4_F32vec4.h:1
CbmDigiManager.h
CbmMvdStationPar::GetHeight
Double_t GetHeight(Int_t stationNumber) const
Definition: CbmMvdStationPar.cxx:105
CbmKFTube
Definition: CbmKFMaterial.h:77
CbmKF::loop_over_nodes
void loop_over_nodes(TObjArray *nodes)
Definition: CbmKF.cxx:315
fabs
friend F32vec4 fabs(const F32vec4 &a)
Definition: L1/vectors/P4_F32vec4.h:60
CbmStsElement::GetNofDaughters
Int_t GetNofDaughters() const
Definition: CbmStsElement.h:95
CbmMvdStationPar
Definition: CbmMvdStationPar.h:22
CbmKF::fInstance
static CbmKF * fInstance
Definition: CbmKF.h:101
CbmKFMaterial::Fe
Double_t Fe
Definition: CbmKFMaterial.h:33
ID
int ID
Definition: CbmMvdSensorDigiToHitTask.cxx:71
CbmKFHit.h
CbmMvdStationPar::GetRadLength
Double_t GetRadLength(Int_t stationNumber) const
Definition: CbmMvdStationPar.cxx:154
CbmStsStation::GetXmax
Double_t GetXmax() const
Definition: CbmStsStation.h:117
z1
Double_t z1[nSects1]
Definition: pipe_v16a_mvdsts100.h:6
CbmKF::Init
InitStatus Init()
Definition: CbmKF.cxx:93
CbmKF::PassMaterialBetween
Int_t PassMaterialBetween(CbmKFTrackInterface &track, Double_t &QP0, Int_t ifst, Int_t ilst)
Definition: CbmKF.cxx:635
max
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
Definition: L1/vectors/P4_F32vec4.h:36
CbmKF::StsStationIDMap
std::map< Int_t, Int_t > StsStationIDMap
Definition: CbmKF.h:91
CbmMvdStationPar::GetBeamHeight
Double_t GetBeamHeight(Int_t stationNumber) const
Definition: CbmMvdStationPar.cxx:166
CbmKF::vMuchMaterial
std::vector< CbmKFTube > vMuchMaterial
Definition: CbmKF.h:75
CbmKF::ReInit
InitStatus ReInit()
Definition: CbmKF.cxx:91
CbmKF::vStsMaterial
std::vector< CbmKFTube > vStsMaterial
Definition: CbmKF.h:74
CbmStsStation
Class representing a station of the StsSystem.
Definition: CbmStsStation.h:29
CbmDefs.h
CbmMvdStationPar::GetStationCount
Int_t GetStationCount() const
Definition: CbmMvdStationPar.h:34