Project
Loading...
Searching...
No Matches
GPUTPCTrackerDump.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
15#include "GPUTPCTracker.h"
16#include "GPUTPCSectorOutput.h"
17#include "GPUReconstruction.h"
18#include "GPUTPCHitId.h"
19#include "GPUTPCTrack.h"
20
21#include <iostream>
22#include <cstring>
23#include <iomanip>
24#include <algorithm>
25#include <numeric>
26
27using namespace o2::gpu;
28
29void GPUTPCTracker::DumpOutput(std::ostream& out)
30{
31 if (Param().par.earlyTpcTransform) {
32 out << "\nSector " << mISector << "\n";
33 const GPUTPCTrack* track = (Output())->GetFirstTrack();
34 for (uint32_t j = 0; j < (Output())->NTracks(); j++) {
35 out << "Track " << j << " (" << track->NHits() << "): ";
36 for (int32_t k = 0; k < track->NHits(); k++) {
37 out << "(" << track->OutTrackCluster(k).GetX() << "," << track->OutTrackCluster(k).GetY() << "," << track->OutTrackCluster(k).GetZ() << ") ";
38 }
39 out << " - (" << track->Param().Y() << " " << track->Param().Z() << " " << track->Param().SinPhi() << " " << track->Param().DzDs() << " " << track->Param().QPt() << "\n";
40 track = track->GetNextTrack();
41 }
42 }
43}
44
45void GPUTPCTracker::DumpTrackingData(std::ostream& out)
46{
47 // Dump Sector Input Data to File
48 out << "\nSector Data (Sector" << mISector << "):" << std::endl;
49 for (int32_t i = 0; i < GPUCA_ROW_COUNT; i++) {
50 if (Row(i).NHits() == 0) {
51 continue;
52 }
53 out << "Row: " << i << std::endl;
54 for (int32_t j = 0; j < Row(i).NHits(); j++) {
55 if (j && j % 16 == 0) {
56 out << std::endl;
57 }
58 out << j << '-' << Data().HitDataY(Row(i), j) << '-' << Data().HitDataZ(Row(i), j) << ", ";
59 }
60 out << std::endl;
61 }
62}
63
64void GPUTPCTracker::DumpLinks(std::ostream& out, int32_t phase)
65{
66 // Dump Links (after Neighbours Finder / Cleaner) to file
67 out << "\nHit Links (Phase " << phase << ", Sector" << mISector << "):" << std::endl;
68 for (int32_t i = 0; i < GPUCA_ROW_COUNT; i++) {
69 if (Row(i).NHits() == 0) {
70 continue;
71 }
72 out << "Row: " << i << std::endl;
73 for (int32_t j = 0; j < Row(i).NHits(); j++) {
74 if (j && j % 32 == 0) {
75 out << std::endl;
76 }
77 out << HitLinkUpData(Row(i), j) << "/" << HitLinkDownData(Row(i), j) << ", ";
78 }
79 out << std::endl;
80 }
81}
82
83void GPUTPCTracker::DumpHitWeights(std::ostream& out)
84{
85 // dump hit weights to file
86 out << "\nHit Weights(Sector" << mISector << "):" << std::endl;
87 for (int32_t i = 0; i < GPUCA_ROW_COUNT; i++) {
88 if (Row(i).NHits() == 0) {
89 continue;
90 }
91 out << "Row: " << i << ":" << std::endl;
92 for (int32_t j = 0; j < Row(i).NHits(); j++) {
93 if (j && j % 32 == 0) {
94 out << std::endl;
95 }
96 out << HitWeight(Row(i), j) << ", ";
97 }
98 out << std::endl;
99 }
100}
101
102void GPUTPCTracker::DumpStartHits(std::ostream& out)
103{
104 // dump start hits to file
105 out << "\nStart Hits: (Sector" << mISector << ") (" << *NStartHits() << ")" << std::endl;
106 for (uint32_t i = 0; i < *NStartHits(); i++) {
107 out << TrackletStartHit(i).RowIndex() << "-" << TrackletStartHit(i).HitIndex() << std::endl;
108 }
109 out << std::endl;
110}
111
112void GPUTPCTracker::DumpTrackHits(std::ostream& out)
113{
114 // dump tracks to file
115 out << "\nTracks: (Sector" << mISector << ") (" << *NTracks() << ")" << std::endl;
116 for (uint32_t j = 0; j < *NTracks(); j++) {
117 if (Tracks()[j].NHits() == 0) {
118 continue;
119 }
120 const GPUTPCBaseTrackParam& p = Tracks()[j].Param();
121 out << " " << j << " x " << p.GetX() << " offset " << p.GetZOffset() << " y " << p.GetY() << " z " << p.GetZ() << " snp " << p.GetSinPhi() << " tgl " << p.GetDzDs() << " qpt " << p.GetQPt() << " - ";
122 for (int32_t k = 0; k < 15; k++) {
123 out << p.GetCov(k) << " ";
124 }
125 out << "- ";
126 for (int32_t i = 0; i < Tracks()[j].NHits(); i++) {
127 out << TrackHits()[Tracks()[j].FirstHitID() + i].RowIndex() << "-" << TrackHits()[Tracks()[j].FirstHitID() + i].HitIndex() << ", ";
128 }
129 if (!mRec->GetProcessingSettings().deterministicGPUReconstruction) {
130 out << "(Track: " << j << ")";
131 }
132 out << std::endl;
133 }
134}
135
136void GPUTPCTracker::DumpTrackletHits(std::ostream& out)
137{
138 // dump tracklets to file
139 int32_t nTracklets = *NTracklets();
140 if (nTracklets < 0) {
141 nTracklets = 0;
142 }
143 out << "\nTracklets: (Sector" << mISector << ") (" << nTracklets << ")" << std::endl;
144 std::vector<int32_t> Ids(nTracklets);
145 std::iota(Ids.begin(), Ids.end(), 0);
146 if (mRec->GetProcessingSettings().deterministicGPUReconstruction) {
147 std::sort(Ids.begin(), Ids.end(), [this](const int32_t& a, const int32_t& b) {
148 if (this->Tracklets()[a].FirstRow() != this->Tracklets()[b].FirstRow()) {
149 return this->Tracklets()[a].FirstRow() > this->Tracklets()[b].FirstRow();
150 }
151 if (this->Tracklets()[a].LastRow() != this->Tracklets()[b].LastRow()) {
152 return this->Tracklets()[a].LastRow() > this->Tracklets()[b].LastRow();
153 }
154 if (this->Tracklets()[a].Param().Y() != this->Tracklets()[b].Param().Y()) {
155 return this->Tracklets()[a].Param().Y() > this->Tracklets()[b].Param().Y();
156 }
157 return this->Tracklets()[a].Param().Z() > this->Tracklets()[b].Param().Z();
158 });
159 }
160 for (int32_t jj = 0; jj < nTracklets; jj++) {
161 const int32_t j = Ids[jj];
162 const auto& tracklet = Tracklets()[j];
163 out << "Tracklet " << std::setw(4) << jj << " (Rows: " << Tracklets()[j].FirstRow() << " - " << tracklet.LastRow() << ", Weight " << Tracklets()[j].HitWeight() << ") ";
164 if (tracklet.LastRow() > tracklet.FirstRow() && (tracklet.FirstRow() >= GPUCA_ROW_COUNT || tracklet.LastRow() >= GPUCA_ROW_COUNT)) {
165 GPUError("Error: Tracklet %d First %d Last %d", j, tracklet.FirstRow(), tracklet.LastRow());
166 out << " (Error: Tracklet " << j << " First " << tracklet.FirstRow() << " Last " << tracklet.LastRow() << ") ";
167 for (int32_t i = 0; i < GPUCA_ROW_COUNT; i++) {
168 // if (tracklet.RowHit(i) != CALINK_INVAL)
169 out << i << "-" << mTrackletRowHits[tracklet.FirstHit() + (i - tracklet.FirstRow())] << ", ";
170 }
171 } else if (tracklet.LastRow() >= tracklet.FirstRow()) {
172 for (int32_t i = tracklet.FirstRow(); i <= tracklet.LastRow(); i++) {
173 out << i << "-" << mTrackletRowHits[tracklet.FirstHit() + (i - tracklet.FirstRow())] << ", ";
174 }
175 }
176 out << std::endl;
177 }
178}
uint64_t phase
Definition RawEventData.h:7
int32_t i
#define GPUCA_ROW_COUNT
uint32_t j
Definition RawData.h:0
GPUReconstruction * mRec
const GPUSettingsProcessing & GetProcessingSettings() const
void DumpOutput(std::ostream &out)
void DumpTrackHits(std::ostream &out)
void DumpLinks(std::ostream &out, int32_t phase)
void DumpStartHits(std::ostream &out)
void DumpHitWeights(std::ostream &out)
if(weight< 0.f||weight > 2e9f)
void DumpTrackingData(std::ostream &out)
void DumpTrackletHits(std::ostream &out)
GLboolean GLboolean GLboolean b
Definition glcorearb.h:1233
GLboolean GLboolean GLboolean GLboolean a
Definition glcorearb.h:1233