File indexing completed on 2024-08-30 02:10:35
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <fmt/printf.h>
0013 #include "DataFormats/Common/interface/Handle.h"
0014 #include "FWCore/Framework/interface/ESHandle.h"
0015 #include "FWCore/Framework/interface/Event.h"
0016 #include "FWCore/Framework/interface/Frameworkfwd.h"
0017 #include "FWCore/Framework/interface/MakerMacros.h"
0018 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0019 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0020 #include "FWCore/ServiceRegistry/interface/Service.h"
0021 #include "FWCore/Utilities/interface/InputTag.h"
0022
0023 #include "DQMServices/Core/interface/MonitorElement.h"
0024 #include "DQMServices/Core/interface/DQMEDAnalyzer.h"
0025 #include "DQMServices/Core/interface/DQMStore.h"
0026 #include "DataFormats/TrackSoA/interface/TracksHost.h"
0027
0028 template <typename T>
0029 class SiPixelMonitorTrackSoAAlpaka : public DQMEDAnalyzer {
0030 public:
0031 using PixelTrackHeterogeneous = TracksHost<T>;
0032 explicit SiPixelMonitorTrackSoAAlpaka(const edm::ParameterSet&);
0033 ~SiPixelMonitorTrackSoAAlpaka() override = default;
0034 void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const& iSetup) override;
0035 void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override;
0036 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0037
0038 private:
0039 edm::EDGetTokenT<PixelTrackHeterogeneous> tokenSoATrack_;
0040 std::string topFolderName_;
0041 bool useQualityCut_;
0042 pixelTrack::Quality minQuality_;
0043 MonitorElement* hnTracks;
0044 MonitorElement* hnLooseAndAboveTracks;
0045 MonitorElement* hnHits;
0046 MonitorElement* hnHitsVsPhi;
0047 MonitorElement* hnHitsVsEta;
0048 MonitorElement* hnLayers;
0049 MonitorElement* hnLayersVsPhi;
0050 MonitorElement* hnLayersVsEta;
0051 MonitorElement* hchi2;
0052 MonitorElement* hChi2VsPhi;
0053 MonitorElement* hChi2VsEta;
0054 MonitorElement* hpt;
0055 MonitorElement* hCurvature;
0056 MonitorElement* heta;
0057 MonitorElement* hphi;
0058 MonitorElement* hz;
0059 MonitorElement* htip;
0060 MonitorElement* hquality;
0061 };
0062
0063
0064
0065
0066
0067 template <typename T>
0068 SiPixelMonitorTrackSoAAlpaka<T>::SiPixelMonitorTrackSoAAlpaka(const edm::ParameterSet& iConfig) {
0069 tokenSoATrack_ = consumes<PixelTrackHeterogeneous>(iConfig.getParameter<edm::InputTag>("pixelTrackSrc"));
0070 topFolderName_ = iConfig.getParameter<std::string>("topFolderName");
0071 useQualityCut_ = iConfig.getParameter<bool>("useQualityCut");
0072 minQuality_ = pixelTrack::qualityByName(iConfig.getParameter<std::string>("minQuality"));
0073 }
0074
0075
0076
0077
0078 template <typename T>
0079 void SiPixelMonitorTrackSoAAlpaka<T>::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0080 const auto& tsoaHandle = iEvent.getHandle(tokenSoATrack_);
0081 if (!tsoaHandle.isValid()) {
0082 edm::LogWarning("SiPixelMonitorTrackSoAAlpaka") << "No Track SoA found \n returning!" << std::endl;
0083 return;
0084 }
0085
0086 auto const& tsoa = *tsoaHandle.product();
0087 auto maxTracks = tsoa.view().metadata().size();
0088 auto const* quality = tsoa.view().quality();
0089 int32_t nTracks = 0;
0090 int32_t nLooseAndAboveTracks = 0;
0091
0092 for (int32_t it = 0; it < maxTracks; ++it) {
0093 auto nHits = tsoa.view().detIndices().size(it);
0094 auto nLayers = tsoa.view()[it].nLayers();
0095 if (nHits == 0)
0096 break;
0097 float pt = tsoa.view()[it].pt();
0098 if (!(pt > 0.))
0099 continue;
0100
0101
0102 pixelTrack::Quality qual = quality[it];
0103 hquality->Fill(int(qual));
0104 nTracks++;
0105
0106 if (useQualityCut_ && quality[it] < minQuality_)
0107 continue;
0108
0109
0110
0111 float chi2 = tsoa.view()[it].chi2();
0112 float phi = tsoa.view()[it].state()(0);
0113 float zip = tsoa.view()[it].state()(4);
0114 float eta = tsoa.view()[it].eta();
0115 float tip = tsoa.view()[it].state()(1);
0116 auto charge = reco::charge(tsoa.view(), it);
0117
0118 hchi2->Fill(chi2);
0119 hChi2VsPhi->Fill(phi, chi2);
0120 hChi2VsEta->Fill(eta, chi2);
0121 hnHits->Fill(nHits);
0122 hnLayers->Fill(nLayers);
0123 hnHitsVsPhi->Fill(phi, nHits);
0124 hnHitsVsEta->Fill(eta, nHits);
0125 hnLayersVsPhi->Fill(phi, nLayers);
0126 hnLayersVsEta->Fill(eta, nLayers);
0127 hpt->Fill(pt);
0128 hCurvature->Fill(charge / pt);
0129 heta->Fill(eta);
0130 hphi->Fill(phi);
0131 hz->Fill(zip);
0132 htip->Fill(tip);
0133 nLooseAndAboveTracks++;
0134 }
0135 hnTracks->Fill(nTracks);
0136 hnLooseAndAboveTracks->Fill(nLooseAndAboveTracks);
0137 }
0138
0139
0140
0141
0142 template <typename T>
0143 void SiPixelMonitorTrackSoAAlpaka<T>::bookHistograms(DQMStore::IBooker& iBook,
0144 edm::Run const& iRun,
0145 edm::EventSetup const& iSetup) {
0146 iBook.cd();
0147 iBook.setCurrentFolder(topFolderName_);
0148
0149
0150 std::string toRep = "Number of tracks";
0151 hnTracks = iBook.book1D("nTracks", fmt::format(";{} per event;#events",toRep), 1001, -0.5, 2001.5);
0152 hnLooseAndAboveTracks = iBook.book1D("nLooseAndAboveTracks", fmt::format(";{} (quality #geq loose) per event;#events",toRep), 1001, -0.5, 2001.5);
0153
0154 toRep = "Number of all RecHits per track (quality #geq loose)";
0155 hnHits = iBook.book1D("nRecHits", fmt::format(";{};#tracks",toRep), 15, -0.5, 14.5);
0156 hnHitsVsPhi = iBook.bookProfile("nHitsPerTrackVsPhi", fmt::format("{} vs track #phi;Track #phi;{}",toRep,toRep), 30, -M_PI, M_PI,0., 15.);
0157 hnHitsVsEta = iBook.bookProfile("nHitsPerTrackVsEta", fmt::format("{} vs track #eta;Track #eta;{}",toRep,toRep), 30, -3., 3., 0., 15.);
0158
0159 toRep = "Number of all layers per track (quality #geq loose)";
0160 hnLayers = iBook.book1D("nLayers", fmt::format(";{};#tracks",toRep), 15, -0.5, 14.5);
0161 hnLayersVsPhi = iBook.bookProfile("nLayersPerTrackVsPhi", fmt::format("{} vs track #phi;Track #phi;{}",toRep,toRep), 30, -M_PI, M_PI,0., 15.);
0162 hnLayersVsEta = iBook.bookProfile("nLayersPerTrackVsEta", fmt::format("{} vs track #eta;Track #eta;{}",toRep,toRep), 30, -3., 3., 0., 15.);
0163
0164 toRep = "Track (quality #geq loose) #chi^{2}/ndof";
0165 hchi2 = iBook.book1D("nChi2ndof", fmt::format(";{};#tracks",toRep), 40, 0., 20.);
0166 hChi2VsPhi = iBook.bookProfile("nChi2ndofVsPhi", fmt::format("{} vs track #phi;Track #phi;{}",toRep,toRep), 30, -M_PI, M_PI, 0., 20.);
0167 hChi2VsEta = iBook.bookProfile("nChi2ndofVsEta", fmt::format("{} vs track #eta;Track #eta;{}",toRep,toRep), 30, -3., 3., 0., 20.);
0168
0169
0170 hpt = iBook.book1D("pt", ";Track (quality #geq loose) p_{T} [GeV];#tracks", 200, 0., 200.);
0171 hCurvature = iBook.book1D("curvature", ";Track (quality #geq loose) q/p_{T} [GeV^{-1}];#tracks", 100, -3., 3.);
0172 heta = iBook.book1D("eta", ";Track (quality #geq loose) #eta;#tracks", 30, -3., 3.);
0173 hphi = iBook.book1D("phi", ";Track (quality #geq loose) #phi;#tracks", 30, -M_PI, M_PI);
0174 hz = iBook.book1D("z", ";Track (quality #geq loose) z [cm];#tracks", 30, -30., 30.);
0175 htip = iBook.book1D("tip", ";Track (quality #geq loose) TIP [cm];#tracks", 100, -0.5, 0.5);
0176 hquality = iBook.book1D("quality", ";Track Quality;#tracks", 7, -0.5, 6.5);
0177 uint i = 1;
0178 for (const auto& q : pixelTrack::qualityName) {
0179 hquality->setBinLabel(i, q.data(), 1);
0180 i++;
0181 }
0182 }
0183
0184 template <typename T>
0185 void SiPixelMonitorTrackSoAAlpaka<T>::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0186
0187 edm::ParameterSetDescription desc;
0188 desc.add<edm::InputTag>("pixelTrackSrc", edm::InputTag("pixelTracksAlpaka"));
0189 desc.add<std::string>("topFolderName", "SiPixelHeterogeneous/PixelTrackAlpaka");
0190 desc.add<bool>("useQualityCut", true);
0191 desc.add<std::string>("minQuality", "loose");
0192 descriptions.addWithDefaultLabel(desc);
0193 }
0194
0195 using SiPixelPhase1MonitorTrackSoAAlpaka = SiPixelMonitorTrackSoAAlpaka<pixelTopology::Phase1>;
0196 using SiPixelPhase2MonitorTrackSoAAlpaka = SiPixelMonitorTrackSoAAlpaka<pixelTopology::Phase2>;
0197 using SiPixelHIonPhase1MonitorTrackSoAAlpaka = SiPixelMonitorTrackSoAAlpaka<pixelTopology::HIonPhase1>;
0198
0199 DEFINE_FWK_MODULE(SiPixelPhase1MonitorTrackSoAAlpaka);
0200 DEFINE_FWK_MODULE(SiPixelPhase2MonitorTrackSoAAlpaka);
0201 DEFINE_FWK_MODULE(SiPixelHIonPhase1MonitorTrackSoAAlpaka);