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