Skip to content

Commit

Permalink
Merge pull request #31723 from cms-patatrack/patatrack_integration_11…
Browse files Browse the repository at this point in the history
…_N_pixel_vertices

Patatrack integration - Pixel vertex reconstruction (11/N)
  • Loading branch information
cmsbuild authored Apr 6, 2021
2 parents ddbde6d + 0abda2e commit f445f9c
Show file tree
Hide file tree
Showing 31 changed files with 2,255 additions and 11 deletions.
9 changes: 9 additions & 0 deletions CUDADataFormats/Vertex/BuildFile.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<use name="cuda"/>
<use name="eigen"/>
<use name="rootcore"/>
<use name="CUDADataFormats/Common"/>
<use name="DataFormats/Common"/>
<use name="HeterogeneousCore/CUDAUtilities"/>
<export>
<lib name="1"/>
</export>
14 changes: 14 additions & 0 deletions CUDADataFormats/Vertex/interface/ZVertexHeterogeneous.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#ifndef CUDADataFormatsVertexZVertexHeterogeneous_H
#define CUDADataFormatsVertexZVertexHeterogeneous_H

#include "CUDADataFormats/Vertex/interface/ZVertexSoA.h"
#include "CUDADataFormats/Common/interface/HeterogeneousSoA.h"
#include "CUDADataFormats/Track/interface/PixelTrackHeterogeneous.h"

using ZVertexHeterogeneous = HeterogeneousSoA<ZVertexSoA>;
#ifndef __CUDACC__
#include "CUDADataFormats/Common/interface/Product.h"
using ZVertexCUDAProduct = cms::cuda::Product<ZVertexHeterogeneous>;
#endif

#endif
26 changes: 26 additions & 0 deletions CUDADataFormats/Vertex/interface/ZVertexSoA.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#ifndef CUDADataFormats_Vertex_ZVertexSoA_h
#define CUDADataFormats_Vertex_ZVertexSoA_h

#include <cstdint>
#include "HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h"

// SOA for vertices
// These vertices are clusterized and fitted only along the beam line (z)
// to obtain their global coordinate the beam spot position shall be added (eventually correcting for the beam angle as well)
struct ZVertexSoA {
static constexpr uint32_t MAXTRACKS = 32 * 1024;
static constexpr uint32_t MAXVTX = 1024;

int16_t idv[MAXTRACKS]; // vertex index for each associated (original) track (-1 == not associate)
float zv[MAXVTX]; // output z-posistion of found vertices
float wv[MAXVTX]; // output weight (1/error^2) on the above
float chi2[MAXVTX]; // vertices chi2
float ptv2[MAXVTX]; // vertices pt^2
int32_t ndof[MAXTRACKS]; // vertices number of dof (reused as workspace for the number of nearest neighbours FIXME)
uint16_t sortInd[MAXVTX]; // sorted index (by pt2) ascending
uint32_t nvFinal; // the number of vertices

__host__ __device__ void init() { nvFinal = 0; }
};

#endif // CUDADataFormats_Vertex_ZVertexSoA_h
8 changes: 8 additions & 0 deletions CUDADataFormats/Vertex/src/classes.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#ifndef CUDADataFormats_Vertex_src_classes_h
#define CUDADataFormats_Vertex_src_classes_h

#include "CUDADataFormats/Vertex/interface/ZVertexHeterogeneous.h"
#include "CUDADataFormats/Common/interface/Product.h"
#include "DataFormats/Common/interface/Wrapper.h"

#endif // CUDADataFormats_Vertex_src_classes_h
6 changes: 6 additions & 0 deletions CUDADataFormats/Vertex/src/classes_def.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<lcgdict>
<class name="cms::cuda::Product<ZVertexHeterogeneous>" persistent="false"/>
<class name="edm::Wrapper<ZVertexCUDAProduct>" persistent="false"/>
<class name="ZVertexHeterogeneous" persistent="false"/>
<class name="edm::Wrapper<ZVertexHeterogeneous>" persistent="false"/>
</lcgdict>
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import FWCore.ParameterSet.Config as cms

from DQM.TrackingMonitorClient.primaryVertexResolutionClient_cfi import primaryVertexResolutionClient as _primaryVertexResolutionClient

pixelVertexResolutionClient = _primaryVertexResolutionClient.clone(
subDirs = ["OfflinePixelPV/Resolution/*"]
)
4 changes: 3 additions & 1 deletion DQMOffline/Configuration/python/DQMOffline_SecondStep_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@
from DQM.CTPPS.ctppsDQM_cff import *
from Validation.RecoTau.DQMSequences_cfi import *
from DQM.TrackingMonitorClient.pixelTrackingEffFromHitPattern_cff import *
from DQM.TrackingMonitorClient.pixelVertexResolutionClient_cfi import *

DQMHarvestTrackerStrip = cms.Sequence ( SiStripOfflineDQMClient )

Expand Down Expand Up @@ -179,7 +180,8 @@
DQMHarvestTrackingZeroBias = cms.Sequence( TrackingOfflineDQMClientZeroBias *
dqmFastTimerServiceClient )

DQMHarvestPixelTracking = cms.Sequence( pixelTrackingEffFromHitPattern )
DQMHarvestPixelTracking = cms.Sequence( pixelTrackingEffFromHitPattern *
pixelVertexResolutionClient )

DQMHarvestOuterTracker = cms.Sequence(
OuterTrackerClient *
Expand Down
4 changes: 3 additions & 1 deletion DQMOffline/Configuration/python/DQMOffline_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,10 +157,12 @@

#DQMOfflineCommon
from DQM.TrackingMonitorSource.pixelTracksMonitoring_cff import *
from DQMOffline.RecoB.PixelVertexMonitor_cff import *
from DQM.SiOuterTracker.OuterTrackerSourceConfig_cff import *
from Validation.RecoTau.DQMSequences_cfi import *

DQMOfflinePixelTracking = cms.Sequence( pixelTracksMonitoring )
DQMOfflinePixelTracking = cms.Sequence( pixelTracksMonitoring *
pixelPVMonitor )

DQMOuterTracker = cms.Sequence( DQMOfflineDCS *
OuterTrackerSource *
Expand Down
8 changes: 8 additions & 0 deletions DQMOffline/RecoB/python/PixelVertexMonitor_cff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import FWCore.ParameterSet.Config as cms

from DQMOffline.RecoB.PrimaryVertexMonitor_cff import pvMonitor as _pvMonitor
pixelPVMonitor = _pvMonitor.clone(
TopFolderName = "OfflinePixelPV",
vertexLabel = "pixelVertices",
ndof = cms.int32( 1 )
)
18 changes: 16 additions & 2 deletions RecoPixelVertexing/Configuration/python/RecoPixelVertexing_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,21 @@
#
# for STARTUP ONLY use try and use Offline 3D PV from pixelTracks, with adaptive vertex
#
#from RecoPixelVertexing.PixelVertexFinding.PixelVertexes_cff import *
from RecoVertex.PrimaryVertexProducer.OfflinePixel3DPrimaryVertices_cfi import *
from RecoPixelVertexing.PixelVertexFinding.PixelVertexes_cff import *
#from RecoVertex.PrimaryVertexProducer.OfflinePixel3DPrimaryVertices_cfi import *
recopixelvertexingTask = cms.Task(pixelTracksTask,pixelVertices)
recopixelvertexing = cms.Sequence(recopixelvertexingTask)

from Configuration.ProcessModifiers.gpu_cff import gpu

from RecoPixelVertexing.PixelVertexFinding.pixelVertexCUDA_cfi import pixelVertexCUDA
from RecoPixelVertexing.PixelVertexFinding.pixelVertexSoA_cfi import pixelVertexSoA
from RecoPixelVertexing.PixelVertexFinding.pixelVertexFromSoA_cfi import pixelVertexFromSoA as _pixelVertexFromSoA

_pixelVertexingCUDATask = cms.Task(pixelTracksTask,pixelVertexCUDA,pixelVertexSoA,pixelVertices)

# pixelVertexSoAonCPU = pixelVertexCUDA.clone()
# pixelVertexSoAonCPU.onGPU = False;

gpu.toReplaceWith(pixelVertices,_pixelVertexFromSoA)
gpu.toReplaceWith(recopixelvertexingTask,_pixelVertexingCUDATask)
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,21 @@ def customizePixelTracksSoAonCPU(process):
pixelRecHitSrc = 'siPixelRecHitsPreSplitting'
)

from RecoPixelVertexing.PixelVertexFinding.pixelVertexCUDA_cfi import pixelVertexCUDA
process.pixelVertexSoA = pixelVertexCUDA.clone(
onGPU = False,
pixelTrackSrc = 'pixelTrackSoA'
)

from RecoPixelVertexing.PixelTrackFitting.pixelTrackProducerFromSoA_cfi import pixelTrackProducerFromSoA
process.pixelTracks = pixelTrackProducerFromSoA.clone(
pixelRecHitLegacySrc = 'siPixelRecHitsPreSplitting'
)

process.reconstruction_step += process.siPixelRecHitsPreSplitting + process.pixelTrackSoA
from RecoPixelVertexing.PixelVertexFinding.pixelVertexFromSoA_cfi import pixelVertexFromSoA
process.pixelVertices = pixelVertexFromSoA.clone()

process.reconstruction_step += process.siPixelRecHitsPreSplitting + process.pixelTrackSoA + process.pixelVertexSoA

return process

Expand All @@ -46,7 +55,7 @@ def customizePixelTracksSoAonCPUForProfiling(process):

process.siPixelRecHitSoAFromLegacy.convertToLegacy = False

process.TkSoA = cms.Path(process.offlineBeamSpot + process.siPixelDigis + process.siPixelClustersPreSplitting + process.siPixelRecHitSoAFromLegacy + process.pixelTrackSoA)
process.TkSoA = cms.Path(process.offlineBeamSpot + process.siPixelDigis + process.siPixelClustersPreSplitting + process.siPixelRecHitSoAFromLegacy + process.pixelTrackSoA + process.pixelVertexSoA)

process.schedule = cms.Schedule(process.TkSoA)

Expand Down
86 changes: 86 additions & 0 deletions RecoPixelVertexing/PixelTrackFitting/plugins/PixelTrackDumpCUDA.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#include <cuda_runtime.h>

#include "CUDADataFormats/Common/interface/Product.h"
#include "CUDADataFormats/Track/interface/PixelTrackHeterogeneous.h"
#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h"
#include "CUDADataFormats/Vertex/interface/ZVertexHeterogeneous.h"
#include "DataFormats/Common/interface/Handle.h"
#include "FWCore/Framework/interface/ConsumesCollector.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/Framework/interface/global/EDAnalyzer.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/PluginManager/interface/ModuleDef.h"
#include "FWCore/Utilities/interface/EDGetToken.h"
#include "FWCore/Utilities/interface/InputTag.h"
#include "FWCore/Utilities/interface/RunningAverage.h"
#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h"
#include "RecoTracker/TkMSParametrization/interface/PixelRecoUtilities.h"

class PixelTrackDumpCUDA : public edm::global::EDAnalyzer<> {
public:
explicit PixelTrackDumpCUDA(const edm::ParameterSet& iConfig);
~PixelTrackDumpCUDA() override = default;

static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);

private:
void analyze(edm::StreamID streamID, edm::Event const& iEvent, const edm::EventSetup& iSetup) const override;
const bool m_onGPU;
edm::EDGetTokenT<cms::cuda::Product<PixelTrackHeterogeneous>> tokenGPUTrack_;
edm::EDGetTokenT<cms::cuda::Product<ZVertexHeterogeneous>> tokenGPUVertex_;
edm::EDGetTokenT<PixelTrackHeterogeneous> tokenSoATrack_;
edm::EDGetTokenT<ZVertexHeterogeneous> tokenSoAVertex_;
};

PixelTrackDumpCUDA::PixelTrackDumpCUDA(const edm::ParameterSet& iConfig)
: m_onGPU(iConfig.getParameter<bool>("onGPU")) {
if (m_onGPU) {
tokenGPUTrack_ =
consumes<cms::cuda::Product<PixelTrackHeterogeneous>>(iConfig.getParameter<edm::InputTag>("pixelTrackSrc"));
tokenGPUVertex_ =
consumes<cms::cuda::Product<ZVertexHeterogeneous>>(iConfig.getParameter<edm::InputTag>("pixelVertexSrc"));
} else {
tokenSoATrack_ = consumes<PixelTrackHeterogeneous>(iConfig.getParameter<edm::InputTag>("pixelTrackSrc"));
tokenSoAVertex_ = consumes<ZVertexHeterogeneous>(iConfig.getParameter<edm::InputTag>("pixelVertexSrc"));
}
}

void PixelTrackDumpCUDA::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;

desc.add<bool>("onGPU", true);
desc.add<edm::InputTag>("pixelTrackSrc", edm::InputTag("caHitNtupletCUDA"));
desc.add<edm::InputTag>("pixelVertexSrc", edm::InputTag("pixelVertexCUDA"));
descriptions.add("pixelTrackDumpCUDA", desc);
}

void PixelTrackDumpCUDA::analyze(edm::StreamID streamID,
edm::Event const& iEvent,
const edm::EventSetup& iSetup) const {
if (m_onGPU) {
auto const& hTracks = iEvent.get(tokenGPUTrack_);
cms::cuda::ScopedContextProduce ctx{hTracks};

auto const& tracks = ctx.get(hTracks);
auto const* tsoa = tracks.get();
assert(tsoa);

auto const& vertices = ctx.get(iEvent.get(tokenGPUVertex_));
auto const* vsoa = vertices.get();
assert(vsoa);

} else {
auto const* tsoa = iEvent.get(tokenSoATrack_).get();
assert(tsoa);

auto const* vsoa = iEvent.get(tokenSoAVertex_).get();
assert(vsoa);
}
}

DEFINE_FWK_MODULE(PixelTrackDumpCUDA);
5 changes: 4 additions & 1 deletion RecoPixelVertexing/PixelVertexFinding/plugins/BuildFile.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<use name="CUDADataFormats/Vertex"/>
<use name="CommonTools/Clustering1D"/>
<use name="DataFormats/BeamSpot"/>
<use name="DataFormats/GeometryCommonDetAlgo"/>
Expand All @@ -15,10 +16,12 @@
<use name="FWCore/Utilities"/>
<use name="Geometry/Records"/>
<use name="Geometry/TrackerGeometryBuilder"/>
<use name="HeterogeneousCore/CUDACore"/>
<use name="HeterogeneousCore/CUDAUtilities"/>
<use name="RecoLocalTracker/ClusterParameterEstimator"/>
<use name="RecoLocalTracker/Records"/>
<use name="RecoPixelVertexing/PixelVertexFinding"/>
<use name="SimDataFormats/PileupSummaryInfo"/>
<library file="*.cc" name="RecoPixelVertexingPixelVertexFindingPlugins">
<library file="*.cc *.cu" name="RecoPixelVertexingPixelVertexFindingPlugins">
<flags EDM_PLUGIN="1"/>
</library>
Loading

0 comments on commit f445f9c

Please sign in to comment.