Project
Loading...
Searching...
No Matches
GPUTPCGMTracksToTPCSeeds.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
16#include "GPUTPCGlobalMergerComponent.h"
17#include "GPUTPCGMMergerTypes.h"
18#include "GPUTPCGMMerger.h"
19#include "GPULogging.h"
20#include "AliTPCtracker.h"
21#include "AliTPCtrack.h"
22#include "AliTPCseed.h"
23#include "AliTPCtrackerSector.h"
24#include "TObjArray.h"
25#include "AliTPCclusterMI.h"
26
27using namespace o2::gpu;
28
29void GPUTPCGMTracksToTPCSeeds::CreateSeedsFromHLTTracks(TObjArray* seeds, AliTPCtracker* tpctracker)
30{
31 const GPUTPCGMMerger* merger = GPUTPCGlobalMergerComponent::GetCurrentMerger();
32 if (merger == nullptr) {
33 return;
34 }
35 seeds->Clear();
36 int32_t index = 0;
37 for (int32_t i = 0; i < merger->NOutputTracks(); i++) {
38 const GPUTPCGMMergedTrack& track = merger->OutputTracks()[i];
39 if (!track.OK()) {
40 continue;
41 }
42
43 AliTPCtrack tr;
44 tr.Set(track.GetParam().GetX(), track.GetAlpha(), track.GetParam().GetPar(), track.GetParam().GetCov());
45 AliTPCseed* seed = new (tpctracker->NextFreeSeed()) AliTPCseed(tr);
46 for (int32_t j = 0; j < GPUCA_ROW_COUNT; j++) {
47 seed->SetClusterPointer(j, nullptr);
48 seed->SetClusterIndex(j, -1);
49 }
50 int32_t ncls = 0;
51 int32_t lastrow = -1;
52 int32_t lastleg = -1;
53 for (int32_t j = track.NClusters() - 1; j >= 0; j--) {
54 const GPUTPCGMMergedTrackHit& cls = merger->Clusters()[track.FirstClusterRef() + j];
56 continue;
57 }
58 if (lastrow != -1 && (cls.row < lastrow || cls.leg != lastleg)) {
59 break;
60 }
61 if (cls.row == lastrow) {
62 continue;
63 }
64
65 AliTPCtrackerRow& row = tpctracker->GetRow(cls.sector % 18, cls.row);
66 uint32_t clIndexOffline = 0;
67 AliTPCclusterMI* clOffline = row.FindNearest2(cls.y, cls.z, 0.01f, 0.01f, clIndexOffline);
68 if (!clOffline) {
69 continue;
70 }
71 clIndexOffline = row.GetIndex(clIndexOffline);
72
73 clOffline->Use(10);
74 seed->SetClusterPointer(cls.row, clOffline);
75 seed->SetClusterIndex2(cls.row, clIndexOffline);
76
77 lastrow = cls.row;
78 lastleg = cls.leg;
79 ncls++;
80 }
81
82 seed->SetRelativeSector(track.GetAlpha() / (M_PI / 9.f));
83 seed->SetNumberOfClusters(ncls);
84 seed->SetNFoundable(ncls);
85 seed->SetChi2(track.GetParam().GetChi2());
86
87 float alpha = seed->GetAlpha();
88 if (alpha >= 2.f * M_PI) {
89 alpha -= 2.f * M_PI;
90 }
91 if (alpha < 0) {
92 alpha += 2.f * M_PI;
93 }
94 seed->SetRelativeSector(track.GetAlpha() / (M_PI / 9.f));
95
96 seed->SetPoolID(tpctracker->GetLastSeedId());
97 seed->SetIsSeeding(kTRUE);
98 seed->SetSeed1(GPUCA_ROW_COUNT - 1);
99 seed->SetSeed2(GPUCA_ROW_COUNT - 2);
100 seed->SetSeedType(0);
101 seed->SetFirstPoint(-1);
102 seed->SetLastPoint(-1);
103 seeds->AddLast(seed); // note, track is seed, don't free the seed
104 index++;
105 }
106}
107
109{
110 const GPUTPCGMMerger* merger = GPUTPCGlobalMergerComponent::GetCurrentMerger();
111 if (merger == nullptr) {
112 return;
113 }
114 int32_t index = 0;
115 for (int32_t i = 0; i < merger->NOutputTracks(); i++) {
116 const GPUTPCGMMergedTrack& track = merger->OutputTracks()[i];
117 if (!track.OK()) {
118 continue;
119 }
120 if (index > seeds->GetEntriesFast()) {
121 GPUError("Invalid number of offline seeds");
122 return;
123 }
124 AliTPCseed* seed = (AliTPCseed*)seeds->UncheckedAt(index++);
125 const gputpcgmmergertypes::GPUTPCOuterParam& param = track.OuterParam();
126 seed->Set(param.X, param.alpha, param.P, param.C);
127 }
128}
129
131{
132 const GPUTPCGMMerger* merger = GPUTPCGlobalMergerComponent::GetCurrentMerger();
133 if (merger == nullptr) {
134 return;
135 }
136 int32_t index = 0;
137 for (int32_t i = 0; i < merger->NOutputTracks(); i++) {
138 const GPUTPCGMMergedTrack& track = merger->OutputTracks()[i];
139 if (!track.OK()) {
140 continue;
141 }
142 if (index > seeds->GetEntriesFast()) {
143 GPUError("Invalid number of offline seeds");
144 return;
145 }
146 AliTPCseed* seed = (AliTPCseed*)seeds->UncheckedAt(index++);
147 seed->Set(track.GetParam().GetX(), track.GetAlpha(), track.GetParam().GetPar(), track.GetParam().GetCov());
148 }
149}
int32_t i
#define GPUCA_ROW_COUNT
uint32_t j
Definition RawData.h:0
static void CreateSeedsFromHLTTracks(TObjArray *seeds, AliTPCtracker *tpctracker)
static void UpdateParamsInner(TObjArray *seeds)
static void UpdateParamsOuter(TObjArray *seeds)
GLfloat GLfloat GLfloat alpha
Definition glcorearb.h:279
GLuint index
Definition glcorearb.h:781
GLenum GLfloat param
Definition glcorearb.h:271
std::vector< int > row