CbmRoot
LitTrackFinderNNVecMuon.cxx
Go to the documentation of this file.
1 
7 #include "../LitAddMaterial.h"
8 #include "../LitExtrapolation.h"
9 #include "../LitFieldGrid.h"
10 #include "../LitFiltration.h"
11 #include "../LitHit.h"
12 #include "../LitMath.h"
13 #include "../LitTrackSelection.h"
14 #include "../LitTypes.h"
15 #include "../LitVecPack.h"
16 #include "LitDetectorLayoutMuon.h"
17 #include "LitHitDataMuon.h"
18 
19 #include <algorithm>
20 #include <iostream>
21 #include <limits>
22 #include <vector>
23 
25  : fTracks()
26  , fLayout()
27  , fHitData()
28  , fMaxNofMissingHits(3)
29  , fIsProcessSubstationsTogether(true)
30  , fSigmaCoef(3.5)
31  , fMaxCovSq(20. * 20.)
32  , fChiSqPixelHitCut(25) {}
33 
35 
37  const PixelHitArray& hits,
38  const TrackArray& trackSeeds,
39  TrackArray& tracks) {
40  ArrangeHits(hits);
41  InitTrackSeeds(trackSeeds);
42  FollowTracks();
43 
44  DoTrackSelectionMuon(fTracks.begin(), fTracks.end());
45 
46  // std::cout << "NOF TRACKS = " << fTracks.size() << std::endl;
47  // Copy tracks to output
48  for (unsigned int iTrack = 0; iTrack < fTracks.size(); iTrack++) {
49  LitScalTrack* track = fTracks[iTrack];
50  // std::cout << "BEFORE " << *track;
51  if (!track->IsGood()) { continue; }
52  // std::cout << "AFTER " << *track;
53  tracks.push_back(new LitScalTrack(*track));
54  }
55 
56  // for (unsigned int i = 0; i < tracks.size(); i++)
57  // std::cout << *tracks[i];
58 
59  for_each(fTracks.begin(), fTracks.end(), DeleteObject());
60  fTracks.clear();
61  fHitData.Clear();
62 }
63 
65  const PixelHitArray& hits) {
66  for (unsigned int iHit = 0; iHit < hits.size(); iHit++) {
67  LitScalPixelHit* hit = hits[iHit];
68  // if (fUsedHitsSet.find(hit->GetRefId()) != fUsedHitsSet.end()) continue;
69  fHitData.AddHit(hit->planeId, hit);
70  }
71  fHitData.SortHits();
72  // std::cout << fHitData;
73 }
74 
76  const TrackArray& trackSeeds) {
77  fscal QpCut = 1. / 1.5;
78  for (unsigned int iTrack = 0; iTrack < trackSeeds.size(); iTrack++) {
79  LitScalTrack* track = trackSeeds[iTrack];
80  if (fabs(track->GetParamLast().Qp) > QpCut) { continue; }
81  track->SetPreviousTrackId(iTrack);
82  LitScalTrack* newTrack = new LitScalTrack(*track);
83  newTrack->SetParamLast(newTrack->GetParamFirst());
84  fTracks.push_back(newTrack);
85  }
86 }
87 
89  // Temporary arrays to store track indices from the fTracks array
90  std::vector<unsigned int> tracksId1;
91  std::vector<unsigned int> tracksId2;
92 
93  // Initially use all tracks from fTracks array
94  for (unsigned int i = 0; i < fTracks.size(); i++) {
95  tracksId1.push_back(i);
96  }
97 
98  // Main loop over station groups for track following
99  unsigned char nofStationGroups = fLayout.GetNofStationGroups();
100  for (unsigned char iStationGroup = 0; iStationGroup < nofStationGroups;
101  iStationGroup++) { // loop over station groups
102  const LitStationGroupMuon<fvec>& stg =
103  fLayout.GetStationGroup(iStationGroup);
104 
105  // First propagate all tracks through absorber
106  PropagateThroughAbsorber(tracksId1, stg.GetAbsorber());
107 
108  // Loop over stations, and propagate tracks from station to station
109  unsigned char nofStations = stg.GetNofStations();
110  for (unsigned char iStation = 0; iStation < nofStations;
111  iStation++) { // loop over stations
112 
113  // Process station for each track
114  ProcessStation(tracksId1, iStationGroup, iStation);
115 
116  // Check missing hits in each track.
117  // Propagate further only tracks which pass the cut.
118  for (unsigned int iTrack = 0; iTrack < tracksId1.size(); iTrack++) {
119  unsigned int id = tracksId1[iTrack];
120  if (fTracks[id]->GetNofMissingHits() <= fMaxNofMissingHits) {
121  tracksId2.push_back(id);
122  }
123  }
124  tracksId1.assign(tracksId2.begin(), tracksId2.end());
125  tracksId2.clear();
126  } // loop over stations
127  } // loop over station groups
128 }
129 
131  const std::vector<unsigned int>& tracksId1,
132  const LitAbsorber<fvec>& absorber) {
133  unsigned int nofTracks = tracksId1.size(); // number of tracks
134  unsigned int nofTracksVec =
135  nofTracks / fvecLen; // number of tracks grouped in vectors
136  unsigned int dTracks =
137  nofTracks
138  - fvecLen
139  * nofTracksVec; // number of tracks remained after grouping in vectors
140 
141  // loop over fTracks, pack data and propagate through the absorber
142  for (unsigned int iTrack = 0; iTrack < nofTracksVec; iTrack++) {
143  unsigned int start = fvecLen * iTrack;
144  // Collect track group
145  std::vector<LitScalTrack*> tracks(fvecLen);
146  for (unsigned int i = 0; i < fvecLen; i++) {
147  tracks[i] = fTracks[tracksId1[start + i]];
148  }
149  PropagateThroughAbsorber(tracks, absorber);
150  } // loop over tracks
151 
152  // Propagate remaining dTracks through the absorber
153  if (dTracks > 0) {
154  std::vector<LitScalTrack*> tracks(fvecLen);
155  std::vector<LitScalTrack> dummyTracks(fvecLen - dTracks);
156  unsigned int start = fvecLen * nofTracksVec;
157  for (unsigned int i = 0; i < dTracks; i++) {
158  tracks[i] = fTracks[tracksId1[start + i]];
159  }
160  // Check if the number of remaining tracks is less than fvecLen.
161  if (dTracks < fvecLen) {
162  for (unsigned int i = 0; i < fvecLen - dTracks; i++) {
163  tracks[dTracks + i] = &dummyTracks[i];
164  } //tracks[dTracks-1];
165  }
166  PropagateThroughAbsorber(tracks, absorber);
167  }
168 }
169 
171  const TrackArray& tracks,
172  const LitAbsorber<fvec>& absorber) {
173  // Pack track parameters
175  for (unsigned int i = 0; i < fvecLen; i++) {
176  par[i] = tracks[i]->GetParamLast();
177  }
178  LitTrackParam<fvec> lpar;
179  PackTrackParam(par, lpar);
180 
181  // Propagate through the absorber
182  // LitFieldValue<fvec> v1, v2, v3;
183  // absorber.GetFieldSliceFront().GetFieldValue(lpar.X, lpar.Y, v1);
184  // absorber.GetFieldSliceMiddle().GetFieldValue(lpar.X, lpar.Y, v2);
185  // absorber.GetFieldSliceBack().GetFieldValue(lpar.X, lpar.Y, v3);
186  LitRK4Extrapolation(lpar,
187  absorber.GetZ(),
188  absorber.GetFieldGridFront(),
189  absorber.GetFieldGridMiddle(),
190  absorber.GetFieldGridBack());
191  LitAddMaterial(lpar, absorber.GetMaterial());
192 
193  // std::cout << "absorber:" << absorber.GetZ() << " " << lpar;
194 
195  // Unpack track parameters
196  UnpackTrackParam(lpar, par);
197  for (unsigned int i = 0; i < fvecLen; i++) {
198  tracks[i]->SetParamLast(par[i]);
199  }
200 }
201 
203  const std::vector<unsigned int>& tracksId1,
204  unsigned char stationGroup,
205  unsigned char station) {
206  unsigned int nofTracks = tracksId1.size(); // number of tracks
207  unsigned int nofTracksVec =
208  nofTracks / fvecLen; // number of tracks grouped in vectors
209  unsigned int dTracks =
210  nofTracks
211  - fvecLen
212  * nofTracksVec; // number of tracks remained after grouping in vectors
213 
214  for (unsigned int iTrack = 0; iTrack < nofTracksVec;
215  iTrack++) { // loop over tracks
216  unsigned int start = fvecLen * iTrack;
217  // Collect track group
218  std::vector<LitScalTrack*> tracks(fvecLen);
219  for (unsigned int i = 0; i < fvecLen; i++) {
220  tracks[i] = fTracks[tracksId1[start + i]];
221  }
222  ProcessStation(tracks, stationGroup, station);
223  } // loop over tracks
224 
225  // Propagate remaining dTracks
226  if (dTracks > 0) {
227  std::vector<LitScalTrack*> tracks(fvecLen);
228  std::vector<LitScalTrack> dummyTracks(fvecLen - dTracks);
229  unsigned int start = fvecLen * nofTracksVec;
230  for (unsigned int i = 0; i < dTracks; i++) {
231  tracks[i] = fTracks[tracksId1[start + i]];
232  }
233  // Check if the number of remaining tracks is less than fvecLen.
234  if (dTracks < fvecLen) {
235  for (unsigned int i = 0; i < fvecLen - dTracks; i++) {
236  tracks[dTracks + i] = &dummyTracks[i];
237  } //tracks[dTracks-1];
238  }
239  ProcessStation(tracks, stationGroup, station);
240  }
241 }
242 
244  const TrackArray& tracks,
245  unsigned char stationGroup,
246  unsigned char station) {
247  const LitStationGroupMuon<fvec>& stg = fLayout.GetStationGroup(stationGroup);
248  const LitStationMuon<fvec>& sta = stg.GetStation(station);
249  unsigned char nofSubstations = sta.GetNofSubstations();
250 
251  // Pack track parameters
252  std::vector<std::vector<LitTrackParamScal>> par(
253  nofSubstations, std::vector<LitTrackParamScal>(fvecLen));
254  for (unsigned int i = 0; i < fvecLen; i++) {
255  par[0][i] = tracks[i]->GetParamLast();
256  }
257  std::vector<LitTrackParam<fvec>> lpar(nofSubstations);
258  PackTrackParam(&par[0][0], lpar[0]);
259 
260  //Approximate the field between the absorbers
261  // TODO: Do not need to recalculate it for each station??
262  LitFieldRegion<fvec> field;
263  stg.GetFieldRegion(lpar[0].X, lpar[0].Y, field);
264 
265  // Propagate to each of the substations
266  for (unsigned char iSubstation = 0; iSubstation < nofSubstations;
267  iSubstation++) { // loop over substations
268  const LitSubstationMuon<fvec>& substation = sta.GetSubstation(iSubstation);
269  // Propagation through station
270  // LitRK4Extrapolation(lpar[iSubstation], substation.GetZ(), field);
271  LitLineExtrapolation(lpar[iSubstation], substation.GetZ());
272  LitAddMaterial(lpar[iSubstation], substation.GetMaterial());
273  if (iSubstation < nofSubstations - 1) {
274  lpar[iSubstation + 1] = lpar[iSubstation];
275  }
276  } // loop over substations
277 
278  for (unsigned char iSubstation = 0; iSubstation < nofSubstations;
279  iSubstation++) {
280  UnpackTrackParam(lpar[iSubstation], &par[iSubstation][0]);
281  }
282  for (unsigned int i = 0; i < fvecLen; i++) {
283  std::vector<LitTrackParamScal> spar(nofSubstations);
284  for (unsigned char iSubstation = 0; iSubstation < nofSubstations;
285  iSubstation++) {
286  spar[iSubstation] = par[iSubstation][i];
287  }
288 
289  CollectHits(spar, tracks[i], stationGroup, station, nofSubstations);
290  }
291 }
292 
294  std::vector<LitTrackParamScal>& par,
295  LitScalTrack* track,
296  unsigned char stationGroup,
297  unsigned char station,
298  unsigned char nofSubstations) {
299  std::vector<PixelHitConstIteratorPair> hits(nofSubstations);
300  unsigned int nofHits = 0;
301 
302  // TODO implement multithreading for this loop
303  for (unsigned char iSubstation = 0; iSubstation < nofSubstations;
304  iSubstation++) { // loop over substations
305  track->SetParamLast(par[iSubstation]);
306 
307  const PixelHitArray& hitvec =
308  fHitData.GetHits(stationGroup, station, iSubstation);
309  fscal err = fHitData.GetMaxErr(stationGroup, station, iSubstation);
310 
311  MinMaxIndex(&par[iSubstation],
312  hitvec,
313  err,
314  hits[iSubstation].first,
315  hits[iSubstation].second);
316  nofHits += std::distance(hits[iSubstation].first, hits[iSubstation].second);
317  } // loop over substations
318 
319 
320  bool hitAdded = false;
321  PixelHitArray ahits(nofHits);
322  std::vector<LitTrackParamScal*> apars(nofHits);
323  unsigned int cnt = 0;
324  for (unsigned char iss = 0; iss < nofSubstations; iss++) {
325  for (PixelHitConstIterator j = hits[iss].first; j != hits[iss].second;
326  j++) {
327  ahits[cnt] = *j;
328  apars[cnt] = &par[iss];
329  cnt++;
330  }
331  }
332 
333  if (AddNearestHit(track, ahits, apars, nofHits)) { hitAdded = true; }
334  // Check if hit was added, if not than increase number of missing hits
335  if (!hitAdded) { track->IncNofMissingHits(); }
336 }
337 
339  LitScalTrack* track,
340  const PixelHitArray& hits,
341  const std::vector<LitTrackParamScal*>& pars,
342  unsigned int nofHits) {
343  bool hitAdded = false;
344  LitScalPixelHit* hita = NULL;
345  LitTrackParamScal param;
347 
348  unsigned int nofHitsVec =
349  nofHits / fvecLen; // number of hits grouped in vectors
350  unsigned int dHits =
351  nofHits
352  - fvecLen
353  * nofHitsVec; // number of hits remained after grouping in vectors
354  for (unsigned int iHit = 0; iHit < nofHitsVec; iHit++) {
355  unsigned int start = fvecLen * iHit;
356 
357  // Pack hit
359  for (unsigned int i = 0; i < fvecLen; i++) {
360  hit[i] = *hits[start + i];
361  }
362  LitPixelHit<fvec> lhit;
363  PackPixelHit(hit, lhit);
364  // Pack track parameters
366  for (unsigned int i = 0; i < fvecLen; i++) {
367  par[i] = *pars[start + i];
368  }
369  LitTrackParam<fvec> lpar;
370  PackTrackParam(par, lpar);
371 
372  //First update track parameters with KF, than check whether the hit is in the validation gate.
373  fvec chisq = 0;
374  LitFiltration(lpar, lhit, chisq);
375 
376  // Unpack track parameters
377  UnpackTrackParam(lpar, par);
378  for (unsigned int i = 0; i < fvecLen; i++) {
379  if (chisq[i] < fChiSqPixelHitCut[i] && chisq[i] < chiSq) {
380  chiSq = chisq[i];
381  hita = hits[start + i];
382  param = par[i];
383  }
384  }
385  }
386  if (dHits > 0) {
387  unsigned int start = fvecLen * nofHitsVec;
389  LitPixelHit<fvec> lhit;
391  LitTrackParam<fvec> lpar;
392  for (unsigned int i = 0; i < dHits; i++) {
393  hit[i] = *hits[start + i];
394  par[i] = *pars[start + i];
395  }
396  // Check if the number of remaining tracks is less than fvecLen.
397  if (dHits < fvecLen) {
398  for (unsigned int i = 0; i < fvecLen - dHits; i++) {
399  hit[dHits + i] = *hits[nofHits - 1];
400  par[dHits + i] = *pars[nofHits - 1];
401  }
402  }
403  PackPixelHit(hit, lhit);
404  PackTrackParam(par, lpar);
405 
406  //First update track parameters with KF, than check whether the hit is in the validation gate.
407  fvec chisq = 0;
408  LitFiltration(lpar, lhit, chisq);
409 
410  // Unpack track parameters
411  UnpackTrackParam(lpar, par);
412  for (unsigned int i = 0; i < fvecLen; i++) {
413  if (chisq[i] < fChiSqPixelHitCut[i] && chisq[i] < chiSq) {
414  chiSq = chisq[i];
415  hita = hits[start + i];
416  param = par[i];
417  }
418  }
419  }
420 
421  // if hit was attached than change track information
422  if (hita != NULL) {
423  track->AddHit(hita);
424  track->SetParamLast(param);
425  track->IncChiSq(chiSq);
426  track->SetNDF(NDF(*track));
427  hitAdded = true;
428  }
429  return hitAdded;
430 }
431 
433  const LitTrackParamScal* par,
434  const PixelHitArray& hits,
435  fscal maxErr,
436  PixelHitConstIterator& first,
437  PixelHitConstIterator& last) {
438  first = hits.begin();
439  last = hits.begin();
440  LitScalPixelHit hit;
441  fscal C0 = par->C0;
442  if (C0 > fMaxCovSq || C0 < 0.) { return; }
443  fscal devX = fSigmaCoef * (std::sqrt(C0) + maxErr);
444  hit.X = par->X - devX;
445  first =
446  std::lower_bound(hits.begin(), hits.end(), &hit, ComparePixelHitXLess());
447  hit.X = par->X + devX;
448  last =
449  std::lower_bound(hits.begin(), hits.end(), &hit, ComparePixelHitXLess());
450 }
lit::parallel::LitTrackFinderNNVecMuon::~LitTrackFinderNNVecMuon
virtual ~LitTrackFinderNNVecMuon()
Destructor.
Definition: LitTrackFinderNNVecMuon.cxx:34
fscal
float fscal
Definition: L1/vectors/P4_F32vec4.h:250
lit::parallel::LitScalPixelHit
Base class for scalar pixel hits.
Definition: LitScalPixelHit.h:31
lit::parallel::LitSubstationMuon
Substation in muon detector layout.
Definition: LitSubstationMuon.h:23
lit::parallel::LitFiltration
void LitFiltration(LitTrackParam< T > &par, const LitPixelHit< T > &hit, T &chiSq)
Function implements Kalman filter update step for pixel hit.
Definition: LitFiltration.h:34
F32vec4
Definition: L1/vectors/P4_F32vec4.h:47
lit::parallel::LitTrackFinderNNVecMuon::PropagateThroughAbsorber
void PropagateThroughAbsorber(const std::vector< unsigned int > &tracksId1, const LitAbsorber< fvec > &absorber)
Definition: LitTrackFinderNNVecMuon.cxx:130
LitTrackFinderNNVecMuon.h
Parallel implementation of MUCH tracking.
lit::parallel::LitTrackParam::X
T X
Definition: LitTrackParam.h:92
lit::parallel::LitStationMuon::GetNofSubstations
unsigned char GetNofSubstations() const
Return number of substations in station.
Definition: LitStationMuon.h:59
lit::parallel::LitSubstationMuon::GetMaterial
const LitMaterialInfo< T > & GetMaterial() const
Return material of substation.
Definition: LitSubstationMuon.h:51
sqrt
friend F32vec4 sqrt(const F32vec4 &a)
Definition: L1/vectors/P4_F32vec4.h:41
lit::parallel::LitStationGroupMuon
Definition: LitStationGroupMuon.h:26
lit::parallel::LitAbsorber::GetZ
const T & GetZ() const
Return Z position of absorber.
Definition: LitAbsorber.h:44
i
int i
Definition: L1/vectors/P4_F32vec4.h:25
lit::parallel::LitAddMaterial
void LitAddMaterial(LitTrackParam< T > &par, T siliconThickness)
Definition: LitAddMaterial.h:34
lit::parallel::LitAbsorber::GetFieldGridMiddle
const LitFieldGrid & GetFieldGridMiddle() const
Return magnetic field grid in the middle of the absorber.
Definition: LitAbsorber.h:84
lit::parallel::LitStationGroupMuon::GetAbsorber
const LitAbsorber< T > & GetAbsorber() const
Return absorber.
Definition: LitStationGroupMuon.h:114
lit::parallel::LitTrackParam::C0
T C0
Definition: LitTrackParam.h:100
lit::parallel::LitAbsorber::GetFieldGridBack
const LitFieldGrid & GetFieldGridBack() const
Return magnetic field grid in the back of the absorber.
Definition: LitAbsorber.h:100
lit::parallel::LitTrackFinderNNVecMuon::CollectHits
void CollectHits(std::vector< LitTrackParamScal > &par, LitScalTrack *track, unsigned char stationGroup, unsigned char station, unsigned char nofSubstations)
Definition: LitTrackFinderNNVecMuon.cxx:293
lit::parallel::UnpackTrackParam
void UnpackTrackParam(const LitTrackParam< fvec > &lpar, LitTrackParam< fscal > par[])
Unpacks LitTrackParam.
Definition: LitVecPack.h:77
lit::parallel::LitScalTrack
Scalar track data class.
Definition: LitScalTrack.h:33
lit::parallel::DeleteObject
Functor class for convenient memory release.
Definition: LitUtils.h:51
lit::parallel::LitScalTrack::SetPreviousTrackId
void SetPreviousTrackId(unsigned short previousTrackId)
Sets previous trackId.
Definition: LitScalTrack.h:188
lit::parallel::LitScalTrack::AddHit
void AddHit(const LitScalPixelHit *hit)
Adds hit to track.
Definition: LitScalTrack.h:60
lit::parallel::LitTrackFinderNNVecMuon::InitTrackSeeds
void InitTrackSeeds(const TrackArray &trackSeeds)
Definition: LitTrackFinderNNVecMuon.cxx:75
lit::parallel::LitTrackParam< fscal >
lit::parallel::PackTrackParam
void PackTrackParam(const LitTrackParam< fscal > par[], LitTrackParam< fvec > &lpar)
Packs LitTrackParam.
Definition: LitVecPack.h:43
lit::parallel::LitScalTrack::IncChiSq
void IncChiSq(fscal dChiSq)
Increases chi square by dChiSq.
Definition: LitScalTrack.h:128
fvecLen
const int fvecLen
Definition: L1/vectors/P4_F32vec4.h:251
lit::parallel::LitFieldRegion
Storage for field approximation along Z.
Definition: LitFieldRegion.h:26
lit::parallel::LitScalTrack::IsGood
bool IsGood() const
Returns true if track is good.
Definition: LitScalTrack.h:196
lit::parallel::LitAbsorber::GetFieldGridFront
const LitFieldGrid & GetFieldGridFront() const
Return magnetic field grid in front of the absorber.
Definition: LitAbsorber.h:70
LitDetectorLayoutMuon.h
Classes for muon geometry description of CBM.
tracks
TClonesArray * tracks
Definition: Analyze_matching.h:17
lit::parallel::LitRK4Extrapolation
void LitRK4Extrapolation(LitTrackParam< T > &par, T zOut, const LitFieldGrid &field1, const LitFieldGrid &field2, const LitFieldGrid &field3)
Definition: LitExtrapolation.h:73
lit::parallel::LitTrackFinderNNVecMuon::MinMaxIndex
void MinMaxIndex(const LitTrackParamScal *par, const PixelHitArray &hits, fscal maxErr, PixelHitConstIterator &first, PixelHitConstIterator &last)
Definition: LitTrackFinderNNVecMuon.cxx:432
lit::parallel::LitStationMuon::GetSubstation
const LitSubstationMuon< T > & GetSubstation(unsigned short index) const
Return substation by index.
Definition: LitStationMuon.h:51
lit::parallel::LitScalPixelHit::X
fscal X
Definition: LitScalPixelHit.h:73
lit::parallel::LitTrackFinderNNVecMuon::LitTrackFinderNNVecMuon
LitTrackFinderNNVecMuon()
Constructor.
Definition: LitTrackFinderNNVecMuon.cxx:24
lit::parallel::LitStationGroupMuon::GetNofStations
unsigned char GetNofStations() const
Return number of stations in this station group.
Definition: LitStationGroupMuon.h:108
lit::parallel::LitTrackFinderNNVecMuon::AddNearestHit
bool AddNearestHit(LitScalTrack *track, const PixelHitArray &hits, const std::vector< LitTrackParamScal * > &pars, unsigned int nofHits)
Definition: LitTrackFinderNNVecMuon.cxx:338
first
bool first
Definition: LKFMinuit.cxx:143
lit::parallel::LitScalTrack::IncNofMissingHits
void IncNofMissingHits(unsigned short dNofMissingHits=1)
Increases number of missing hits by dNofMissingHits.
Definition: LitScalTrack.h:174
lit::parallel::LitTrackFinderNNVecMuon::ArrangeHits
void ArrangeHits(const PixelHitArray &hits)
Definition: LitTrackFinderNNVecMuon.cxx:64
lit::parallel::LitScalTrack::GetParamFirst
const LitTrackParamScal & GetParamFirst() const
Returns first parameter of the track.
Definition: LitScalTrack.h:90
lit::parallel::LitSubstationMuon::GetZ
const T & GetZ() const
Return Z position of substation.
Definition: LitSubstationMuon.h:39
lit::parallel::LitAbsorber::GetMaterial
const LitMaterialInfo< T > & GetMaterial() const
Return absorber material.
Definition: LitAbsorber.h:56
lit::parallel::PackPixelHit
void PackPixelHit(const LitScalPixelHit hit[], LitPixelHit< fvec > &lhit)
Packs LitPixelHit.
Definition: LitVecPack.h:146
lit::parallel::LitStationGroupMuon::GetFieldRegion
void GetFieldRegion(T x, T y, LitFieldRegion< T > &field) const
Calculate field region for the group of stations.
Definition: LitStationGroupMuon.h:128
lit::parallel::LitScalTrack::SetParamLast
void SetParamLast(const LitTrackParamScal &param)
Sets last track parameter.
Definition: LitScalTrack.h:110
fabs
friend F32vec4 fabs(const F32vec4 &a)
Definition: L1/vectors/P4_F32vec4.h:60
lit::parallel::LitScalTrack::GetParamLast
const LitTrackParamScal & GetParamLast() const
Returns last parameter of the track.
Definition: LitScalTrack.h:104
lit::parallel::LitAbsorber
Absorber in muon detector layout.
Definition: LitAbsorber.h:23
hits
static vector< vector< QAHit > > hits
Definition: CbmTofHitFinderTBQA.cxx:114
lit::parallel::LitTrackParam::Qp
T Qp
Definition: LitTrackParam.h:97
lit::parallel::NDF
unsigned short NDF(const LitScalTrack &track)
Returns number of degrees of freedom for the track.
Definition: LitMath.h:50
lit::parallel::LitTrackFinderNNVecMuon::ProcessStation
void ProcessStation(const std::vector< unsigned int > &tracksId1, unsigned char stationGroup, unsigned char station)
Definition: LitTrackFinderNNVecMuon.cxx:202
lit::parallel::LitPixelHit
Base class for pixel hits.
Definition: LitPixelHit.h:29
lit::parallel::LitStationGroupMuon::GetStation
const LitStationMuon< T > & GetStation(unsigned short index) const
Return station by index.
Definition: LitStationGroupMuon.h:100
lit::parallel::LitTrackFinderNNVecMuon::FollowTracks
void FollowTracks()
Definition: LitTrackFinderNNVecMuon.cxx:88
lit::parallel::LitStationMuon
Station in muon detector layout.
Definition: LitStationMuon.h:26
lit::parallel::LitLineExtrapolation
void LitLineExtrapolation(LitTrackParam< T > &par, T zOut)
Line track extrapolation for the field free regions.
Definition: LitExtrapolation.h:37
max
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
Definition: L1/vectors/P4_F32vec4.h:36
lit::parallel::LitTrackFinderNNVecMuon::DoFind
virtual void DoFind(const PixelHitArray &hits, const TrackArray &trackSeeds, TrackArray &tracks)
Main function for tracking.
Definition: LitTrackFinderNNVecMuon.cxx:36
LitHitDataMuon.h
Class for accessing hits in the track reconstruction.
lit::parallel::LitScalTrack::SetNDF
void SetNDF(unsigned short NDF)
Sets number of degrees of freedom.
Definition: LitScalTrack.h:140