|
50 | 50 | #include "GPUTPCConvertImpl.h" |
51 | 51 | #include "TPCFastTransform.h" |
52 | 52 | #include "CorrectionMapsHelper.h" |
| 53 | +#include "GPUROOTDump.h" |
53 | 54 | #ifdef GPUCA_HAVE_O2HEADERS |
54 | 55 | #include "SimulationDataFormat/ConstMCTruthContainer.h" |
55 | 56 | #include "SimulationDataFormat/MCCompLabel.h" |
@@ -1708,6 +1709,52 @@ void GPUQA::RunQA(bool matchOnly, const std::vector<o2::tpc::TrackTPC>* tracksEx |
1708 | 1709 | GPUInfo("QA Time: Cluster Counts:\t%6.0f us", timer.GetCurrentElapsedTime(true) * 1e6); |
1709 | 1710 | } |
1710 | 1711 |
|
| 1712 | + if (mConfig.dumpToROOT) { |
| 1713 | + if (!clNative || !mTracking || !mTracking->mIOPtrs.mergedTrackHitAttachment || !mTracking->mIOPtrs.mergedTracks) { |
| 1714 | + throw std::runtime_error("Cannot dump non o2::tpc::clusterNative clusters, need also hit attachmend and GPU tracks"); |
| 1715 | + } |
| 1716 | + static auto cldump = GPUROOTDump<o2::tpc::ClusterNative, GPUTPCGMMergedTrack, GPUTPCGMMergedTrackHit, unsigned int, unsigned int, float, float, float, unsigned int, unsigned int, unsigned int>::getNew("cluster", "track", "trackHit", "attach", "extState", "x", "y", "z", "sector", "row", "nEv", "clusterTree"); |
| 1717 | + unsigned int clid = 0; |
| 1718 | + for (unsigned int i = 0; i < GPUChainTracking::NSLICES; i++) { |
| 1719 | + for (unsigned int j = 0; j < GPUCA_ROW_COUNT; j++) { |
| 1720 | + for (unsigned int k = 0; k < mClNative->nClusters[i][j]; k++) { |
| 1721 | + const auto& cl = mClNative->clusters[i][j][k]; |
| 1722 | + unsigned int attach = mTracking->mIOPtrs.mergedTrackHitAttachment[clid]; |
| 1723 | + GPUTPCGMMergedTrack trk; |
| 1724 | + GPUTPCGMMergedTrackHit trkHit; |
| 1725 | + memset((void*)&trk, 0, sizeof(trk)); |
| 1726 | + memset((void*)&trkHit, 0, sizeof(trkHit)); |
| 1727 | + float x = 0, y = 0, z = 0; |
| 1728 | + if (attach & gputpcgmmergertypes::attachFlagMask) { |
| 1729 | + unsigned int track = attach & gputpcgmmergertypes::attachTrackMask; |
| 1730 | + trk = mTracking->mIOPtrs.mergedTracks[track]; |
| 1731 | + for (unsigned int l = 0; l < trk.NClusters(); l++) { |
| 1732 | + const auto& tmp = mTracking->mIOPtrs.mergedTrackHits[trk.FirstClusterRef() + l]; |
| 1733 | + if (tmp.num == clid) { |
| 1734 | + trkHit = tmp; |
| 1735 | + break; |
| 1736 | + } |
| 1737 | + } |
| 1738 | + mTracking->GetTPCTransformHelper()->Transform(i, j, cl.getPad(), cl.getTime(), x, y, z, trk.GetParam().GetTZOffset()); |
| 1739 | + mTracking->GetParam().Slice2Global(i, x, y, z, &x, &y, &z); |
| 1740 | + } |
| 1741 | + |
| 1742 | + unsigned int extState = mTracking->mIOPtrs.mergedTrackHitStates ? mTracking->mIOPtrs.mergedTrackHitStates[clid] : 0; |
| 1743 | + |
| 1744 | + cldump.Fill(cl, trk, trkHit, attach, extState, x, y, z, i, j, mNEvents - 1); |
| 1745 | + clid++; |
| 1746 | + } |
| 1747 | + } |
| 1748 | + } |
| 1749 | + } |
| 1750 | + |
| 1751 | + static auto trkdump = GPUROOTDump<unsigned int, GPUTPCGMMergedTrack>::getNew("nEv", "tracks"); |
| 1752 | + for (unsigned int i = 0; i < mTracking->mIOPtrs.nMergedTracks; i++) { |
| 1753 | + if (mTracking->mIOPtrs.mergedTracks[i].OK()) { |
| 1754 | + trkdump.Fill(mNEvents - 1, mTracking->mIOPtrs.mergedTracks[i]); |
| 1755 | + } |
| 1756 | + } |
| 1757 | + |
1711 | 1758 | mTrackingScratchBuffer.clear(); |
1712 | 1759 | } |
1713 | 1760 |
|
|
0 commit comments