diff --git a/DQM/SiPixelPhase1Heterogeneous/plugins/BuildFile.xml b/DQM/SiPixelPhase1Heterogeneous/plugins/BuildFile.xml
new file mode 100644
index 0000000000000..1732d8dd0b83f
--- /dev/null
+++ b/DQM/SiPixelPhase1Heterogeneous/plugins/BuildFile.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DQM/SiPixelPhase1Heterogeneous/plugins/SiPixelPhase1MonitorTrackSoA.cc b/DQM/SiPixelPhase1Heterogeneous/plugins/SiPixelPhase1MonitorTrackSoA.cc
new file mode 100644
index 0000000000000..48e941b263f00
--- /dev/null
+++ b/DQM/SiPixelPhase1Heterogeneous/plugins/SiPixelPhase1MonitorTrackSoA.cc
@@ -0,0 +1,128 @@
+// -*- C++ -*-
+///bookLayer
+// Package: SiPixelPhase1MonitorTrackSoA
+// Class: SiPixelPhase1MonitorTrackSoA
+//
+/**\class SiPixelPhase1MonitorTrackSoA SiPixelPhase1MonitorTrackSoA.cc
+*/
+//
+// Author: Suvankar Roy Chowdhury
+//
+#include
+#include
+#include "FWCore/Framework/interface/Frameworkfwd.h"
+#include "FWCore/Framework/interface/Event.h"
+#include "FWCore/Framework/interface/ESHandle.h"
+#include "FWCore/Framework/interface/MakerMacros.h"
+#include "FWCore/Framework/interface/ESWatcher.h"
+#include "FWCore/MessageLogger/interface/MessageLogger.h"
+#include "FWCore/ParameterSet/interface/ParameterSet.h"
+#include "FWCore/ServiceRegistry/interface/Service.h"
+#include "FWCore/Utilities/interface/InputTag.h"
+#include "DataFormats/Common/interface/Handle.h"
+// DQM Histograming
+#include "DQMServices/Core/interface/MonitorElement.h"
+#include "DQMServices/Core/interface/DQMEDAnalyzer.h"
+#include "DQMServices/Core/interface/DQMStore.h"
+#include "CUDADataFormats/Track/interface/PixelTrackHeterogeneous.h"
+#include "CUDADataFormats/Common/interface/HostProduct.h"
+#include "CUDADataFormats/SiPixelCluster/interface/gpuClusteringConstants.h"
+#include "CUDADataFormats/Common/interface/HostProduct.h"
+
+class SiPixelPhase1MonitorTrackSoA : public DQMEDAnalyzer {
+public:
+ explicit SiPixelPhase1MonitorTrackSoA(const edm::ParameterSet&);
+ ~SiPixelPhase1MonitorTrackSoA() override;
+ void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const& iSetup) override;
+ void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override;
+ //static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
+
+private:
+ edm::EDGetTokenT tokenSoATrack_;
+ std::string topFolderName_;
+ MonitorElement* hnTracks;
+ MonitorElement* hnHits;
+ MonitorElement* hchi2;
+ MonitorElement* hpt;
+ MonitorElement* heta;
+ MonitorElement* hphi;
+ MonitorElement* hz;
+};
+
+//
+// constructors
+//
+
+SiPixelPhase1MonitorTrackSoA::SiPixelPhase1MonitorTrackSoA(const edm::ParameterSet& iConfig) {
+ tokenSoATrack_ = consumes(iConfig.getParameter("pixelTrackSrc"));
+ topFolderName_ = iConfig.getParameter("TopFolderName");//"SiPixelHeterogeneous/PixelTrackSoA";
+}
+
+SiPixelPhase1MonitorTrackSoA::~SiPixelPhase1MonitorTrackSoA() {
+ // do anything here that needs to be done at desctruction time
+ // (e.g. close files, deallocate resources etc.)
+ edm::LogInfo("SiPixelPhase1MonitorTrackSoA") << ">>> Destroy SiPixelPhase1MonitorTrackSoA ";
+}
+
+// -- Analyze
+//
+void SiPixelPhase1MonitorTrackSoA::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
+ auto const& tsoa = *iEvent.get(tokenSoATrack_);
+ auto maxTracks = tsoa.stride();
+ //for future if we need to cut on quality
+ //auto const *quality = tsoa.qualityData();
+ //auto const &fit = tsoa.stateAtBS;
+ //auto const &hitIndices = tsoa.hitIndices;
+
+ int32_t nTracks=0;
+ for (int32_t it = 0; it < maxTracks; ++it) {
+ auto nHits = tsoa.nHits(it);
+ if (nHits == 0)
+ break; // this is a guard
+ float pt = tsoa.pt(it);
+ if(!(pt > 0.)) continue;
+ float chi2 = tsoa.chi2(it);
+ float phi = tsoa.phi(it);
+ float zip = tsoa.zip(it);
+ float eta = tsoa.eta(it);
+ std::cout << "Track chi2, pt, phi, z, eta:"
+ << chi2 << "\t"
+ << pt << "\t"
+ << phi << "\t"
+ << zip << "\t"
+ << eta << "\t"
+ << std::endl;
+ hchi2->Fill(chi2);
+ hnHits->Fill(nHits);
+ hpt->Fill(pt);
+ heta->Fill(eta);
+ hphi->Fill(phi);
+ hz->Fill(zip);
+ nTracks++;
+ }
+ std::cout << "Number of SoA tracks>>>" << nTracks << std::endl;
+ hnTracks->Fill(nTracks);
+}
+
+
+//
+// -- Book Histograms
+//
+void SiPixelPhase1MonitorTrackSoA::bookHistograms(DQMStore::IBooker& ibooker,
+ edm::Run const& iRun,
+ edm::EventSetup const& iSetup) {
+ //std::string top_folder = ""//
+ ibooker.cd();
+ ibooker.setCurrentFolder(topFolderName_);
+ hnTracks = ibooker.book1D("nTracks", ";Number of tracks per event;#entries", 1001, -0.5, 1000.5);
+ hnHits = ibooker.book1D("nRecHits", ";Number of all RecHits per track;#entries", 41, -0.5, 40.5);
+ hchi2 = ibooker.book1D("nChi2ndof", ";Track chi-squared over ndof;#entries", 40, 0., 20.);
+ hpt = ibooker.book1D("pt", ";Track p_T;#entries", 200, 0., 200.);
+ heta = ibooker.book1D("eta", ";Track #eta;#entries", 30, -3., 3.);
+ hphi = ibooker.book1D("phi", ";Track #phi;#entries", 30, -M_PI, M_PI);
+ hz = ibooker.book1D("z", ";Track z;#entries", 30, -30., 30);
+}
+
+//void SiPixelPhase1MonitorTrackSoA::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
+//}
+DEFINE_FWK_MODULE(SiPixelPhase1MonitorTrackSoA);
diff --git a/DQM/SiPixelPhase1Heterogeneous/plugins/SiPixelPhase1MonitorVertexSoA.cc b/DQM/SiPixelPhase1Heterogeneous/plugins/SiPixelPhase1MonitorVertexSoA.cc
new file mode 100644
index 0000000000000..28d9361811fd8
--- /dev/null
+++ b/DQM/SiPixelPhase1Heterogeneous/plugins/SiPixelPhase1MonitorVertexSoA.cc
@@ -0,0 +1,120 @@
+// -*- C++ -*-
+///bookLayer
+// Package: SiPixelPhase1MonitorVertexSoA
+// Class: SiPixelPhase1MonitorVertexSoA
+//
+/**\class SiPixelPhase1MonitorVertexSoA SiPixelPhase1MonitorVertexSoA.cc
+*/
+//
+// Author: Suvankar Roy Chowdhury
+//
+#include
+#include "FWCore/Framework/interface/Frameworkfwd.h"
+#include "FWCore/Framework/interface/Event.h"
+#include "FWCore/Framework/interface/ESHandle.h"
+#include "FWCore/Framework/interface/MakerMacros.h"
+#include "FWCore/Framework/interface/ESWatcher.h"
+#include "FWCore/MessageLogger/interface/MessageLogger.h"
+#include "FWCore/ParameterSet/interface/ParameterSet.h"
+#include "FWCore/ServiceRegistry/interface/Service.h"
+#include "FWCore/Utilities/interface/InputTag.h"
+#include "DataFormats/Common/interface/Handle.h"
+// DQM Histograming
+#include "DQMServices/Core/interface/MonitorElement.h"
+#include "DQMServices/Core/interface/DQMEDAnalyzer.h"
+#include "DQMServices/Core/interface/DQMStore.h"
+#include "CUDADataFormats/Vertex/interface/ZVertexHeterogeneous.h"
+#include "CUDADataFormats/Common/interface/HostProduct.h"
+#include "CUDADataFormats/Common/interface/HostProduct.h"
+#include "DataFormats/BeamSpot/interface/BeamSpot.h"
+
+class SiPixelPhase1MonitorVertexSoA : public DQMEDAnalyzer {
+public:
+ explicit SiPixelPhase1MonitorVertexSoA(const edm::ParameterSet&);
+ ~SiPixelPhase1MonitorVertexSoA() override;
+ void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const& iSetup) override;
+ void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override;
+ //static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
+
+private:
+ edm::EDGetTokenT tokenSoAVertex_;
+ edm::EDGetTokenT tokenBeamSpot_;
+ std::string topFolderName_;
+ MonitorElement* hnVertex;
+ MonitorElement* hx;
+ MonitorElement* hy;
+ MonitorElement* hz;
+ MonitorElement* hchi2;
+ MonitorElement* hptv2;
+};
+
+//
+// constructors
+//
+
+SiPixelPhase1MonitorVertexSoA::SiPixelPhase1MonitorVertexSoA(const edm::ParameterSet& iConfig) {
+ tokenSoAVertex_ = consumes(iConfig.getParameter("pixelVertexSrc"));
+ tokenBeamSpot_ = consumes(iConfig.getParameter("beamSpotSrc"));
+ topFolderName_ = iConfig.getParameter("TopFolderName");
+}
+
+SiPixelPhase1MonitorVertexSoA::~SiPixelPhase1MonitorVertexSoA() {
+ // do anything here that needs to be done at desctruction time
+ // (e.g. close files, deallocate resources etc.)
+ edm::LogInfo("SiPixelPhase1MonitorVertexSoA") << ">>> Destroy SiPixelPhase1MonitorVertexSoA ";
+}
+
+// -- Analyze
+//
+void SiPixelPhase1MonitorVertexSoA::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
+ auto const &vsoa = *(iEvent.get(tokenSoAVertex_).get());
+ int nVertices = vsoa.nvFinal;
+ std::cout << "nVertices>>>>" << nVertices << std::endl;
+ auto bsHandle = iEvent.getHandle(tokenBeamSpot_);
+ float x0 = 0, y0 = 0, z0 = 0, dxdz = 0, dydz = 0;
+ if (!bsHandle.isValid()) {
+ edm::LogWarning("PixelVertexProducer") << "No beamspot found. returning vertexes with (0,0,Z) ";
+ } else {
+ const reco::BeamSpot &bs = *bsHandle;
+ x0 = bs.x0();
+ y0 = bs.y0();
+ z0 = bs.z0();
+ dxdz = bs.dxdz();
+ dydz = bs.dydz();
+ }
+ for(int iv = 0; iv < nVertices; iv++) {
+ auto z = vsoa.zv[iv];
+ auto x = x0 + dxdz * z;
+ auto y = y0 + dydz * z;
+ z+=z0;
+ hx->Fill(x);
+ hy->Fill(y);
+ hz->Fill(z);
+ if(vsoa.ndof[iv] != 0)
+ hchi2->Fill(vsoa.chi2[iv]/vsoa.ndof[iv]);
+ hptv2->Fill(vsoa.ptv2[iv]);
+ }
+ hnVertex->Fill(nVertices);
+}
+
+
+//
+// -- Book Histograms
+//
+void SiPixelPhase1MonitorVertexSoA::bookHistograms(DQMStore::IBooker& ibooker,
+ edm::Run const& iRun,
+ edm::EventSetup const& iSetup) {
+ //std::string top_folder = ""//
+ ibooker.cd();
+ ibooker.setCurrentFolder(topFolderName_);
+ hnVertex = ibooker.book1D("nVertex", ";# of Vertex;#entries", 201, -0.5, 200.5);
+ hx = ibooker.book1D("vx", ";Vertez x;#entries", 30, -30., 30);
+ hy = ibooker.book1D("vy", ";Vertez y;#entries", 30, -30., 30);
+ hz = ibooker.book1D("vz", ";Vertez z;#entries", 30, -30., 30);
+ hchi2 = ibooker.book1D("chi2", ";Vertex chi-squared over ndof;#entries", 40, 0., 20.);
+ hptv2 = ibooker.book1D("ptsq", ";Vertex p_T squared;#entries", 200, 0., 200.);
+}
+
+//void SiPixelPhase1MonitorVertexSoA::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
+//}
+DEFINE_FWK_MODULE(SiPixelPhase1MonitorVertexSoA);
diff --git a/DQM/SiPixelPhase1Heterogeneous/python/SiPixelPhase1MonitorTrackSoA_cfi.py b/DQM/SiPixelPhase1Heterogeneous/python/SiPixelPhase1MonitorTrackSoA_cfi.py
new file mode 100644
index 0000000000000..59947337cf9c9
--- /dev/null
+++ b/DQM/SiPixelPhase1Heterogeneous/python/SiPixelPhase1MonitorTrackSoA_cfi.py
@@ -0,0 +1,27 @@
+import FWCore.ParameterSet.Config as cms
+from Configuration.ProcessModifiers.gpu_cff import gpu
+from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer
+
+
+monitorpixelTrackSoA = DQMEDAnalyzer('SiPixelPhase1MonitorTrackSoA',
+ pixelTrackSrc = cms.InputTag("pixelTracksSoA@cpu"),
+ TopFolderName = cms.string("SiPixelHeterogeneous/PixelTrackSoA"),
+)
+
+gpu.toModify(monitorpixelTrackSoA,
+ pixelTrackSrc = cms.InputTag("pixelTracksSoA@cuda")
+)
+
+'''
+from HeterogeneousCore.CUDACore.SwitchProducerCUDA import SwitchProducerCUDA
+monitorpixelTrackSoA = SwitchProducerCUDA(
+ cpu = DQMEDAnalyzer('SiPixelPhase1MonitorTrackSoA',
+ pixelTrackSrc = cms.InputTag("pixelTracksSoA@cpu"),
+ TopFolderName = cms.string("SiPixelHeterogeneous/PixelTrackSoA"),
+ ),
+ cuda = DQMEDAnalyzer('SiPixelPhase1MonitorTrackSoA',
+ pixelTrackSrc = cms.InputTag("pixelTracksSoA@cuda"),
+ TopFolderName = cms.string("SiPixelHeterogeneous/PixelTrackSoA"),
+ ),
+)
+'''
diff --git a/DQM/SiPixelPhase1Heterogeneous/python/SiPixelPhase1MonitorVertexSoA_cfi.py b/DQM/SiPixelPhase1Heterogeneous/python/SiPixelPhase1MonitorVertexSoA_cfi.py
new file mode 100644
index 0000000000000..dbe0eb3277be1
--- /dev/null
+++ b/DQM/SiPixelPhase1Heterogeneous/python/SiPixelPhase1MonitorVertexSoA_cfi.py
@@ -0,0 +1,14 @@
+import FWCore.ParameterSet.Config as cms
+from Configuration.ProcessModifiers.gpu_cff import gpu
+from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer
+#from HeterogeneousCore.CUDACore.SwitchProducerCUDA import SwitchProducerCUDA
+
+monitorpixelVertexSoA = DQMEDAnalyzer('SiPixelPhase1MonitorVertexSoA',
+ pixelVertexSrc = cms.InputTag("pixelVerticesSoA@cpu"),
+ beamSpotSrc = cms.InputTag("offlineBeamSpot"),
+ TopFolderName = cms.string("SiPixelHeterogeneous/PixelVertexSoA"),
+)
+
+gpu.toModify(monitorpixelVertexSoA,
+ pixelVertexSrc = cms.InputTag("pixelVerticesSoA@cuda")
+)