File indexing completed on 2024-06-13 03:24:01
0001 #include "FWCore/Framework/interface/Frameworkfwd.h"
0002 #include "FWCore/Framework/interface/stream/EDProducer.h"
0003 #include "FWCore/Framework/interface/Event.h"
0004 #include "FWCore/Framework/interface/EventSetup.h"
0005 #include "FWCore/Framework/interface/ESHandle.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0008 #include "HeterogeneousCore/AlpakaInterface/interface/host.h"
0009
0010 #include "DataFormats/Common/interface/ValueMap.h"
0011 #include "DataFormats/HGCalReco/interface/MtdHostCollection.h"
0012 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0013 #include "DataFormats/TrackReco/interface/Track.h"
0014
0015 using namespace edm;
0016
0017 class MTDSoAProducer : public edm::stream::EDProducer<> {
0018 public:
0019 MTDSoAProducer(const ParameterSet& pset);
0020
0021 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0022
0023 void produce(edm::Event& ev, const edm::EventSetup& es) final;
0024
0025 private:
0026 edm::EDGetTokenT<reco::TrackCollection> tracksToken_;
0027 edm::EDGetTokenT<edm::ValueMap<int>> trackAssocToken_;
0028 edm::EDGetTokenT<edm::ValueMap<float>> t0Token_;
0029 edm::EDGetTokenT<edm::ValueMap<float>> sigmat0Token_;
0030 edm::EDGetTokenT<edm::ValueMap<float>> tmtdToken_;
0031 edm::EDGetTokenT<edm::ValueMap<float>> sigmatmtdToken_;
0032 edm::EDGetTokenT<edm::ValueMap<float>> betaToken_;
0033 edm::EDGetTokenT<edm::ValueMap<float>> pathToken_;
0034 edm::EDGetTokenT<edm::ValueMap<float>> MVAQualityToken_;
0035 edm::EDGetTokenT<edm::ValueMap<GlobalPoint>> posInMtdToken_;
0036 edm::EDGetTokenT<edm::ValueMap<float>> momentumWithMTDToken_;
0037 edm::EDGetTokenT<edm::ValueMap<float>> probPiToken_;
0038 edm::EDGetTokenT<edm::ValueMap<float>> probKToken_;
0039 edm::EDGetTokenT<edm::ValueMap<float>> probPToken_;
0040 };
0041
0042 MTDSoAProducer::MTDSoAProducer(const ParameterSet& iConfig)
0043 : tracksToken_(consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("tracksSrc"))),
0044 trackAssocToken_(consumes<edm::ValueMap<int>>(iConfig.getParameter<edm::InputTag>("trackAssocSrc"))),
0045 t0Token_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("t0Src"))),
0046 sigmat0Token_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("sigmat0Src"))),
0047 tmtdToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("tmtdSrc"))),
0048 sigmatmtdToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("sigmatmtdSrc"))),
0049 betaToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("betamtd"))),
0050 pathToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("pathmtd"))),
0051 MVAQualityToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("mvaquality"))),
0052 posInMtdToken_(consumes<edm::ValueMap<GlobalPoint>>(iConfig.getParameter<edm::InputTag>("posmtd"))),
0053 momentumWithMTDToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("momentum"))),
0054 probPiToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("probPi"))),
0055 probKToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("probK"))),
0056 probPToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("probP"))) {
0057 produces<MtdHostCollection>();
0058 }
0059
0060
0061 void MTDSoAProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0062 edm::ParameterSetDescription desc;
0063 desc.add<edm::InputTag>("tracksSrc", edm::InputTag("generalTracks"));
0064 desc.add<edm::InputTag>("trackAssocSrc", edm::InputTag("trackExtenderWithMTD:generalTrackassoc"));
0065 desc.add<edm::InputTag>("t0Src", edm::InputTag("tofPID:t0"));
0066 desc.add<edm::InputTag>("sigmat0Src", edm::InputTag("tofPID:sigmat0"));
0067 desc.add<edm::InputTag>("tmtdSrc", edm::InputTag("trackExtenderWithMTD:generalTracktmtd"));
0068 desc.add<edm::InputTag>("sigmatmtdSrc", edm::InputTag("trackExtenderWithMTD:generalTracksigmatmtd"));
0069 desc.add<edm::InputTag>("betamtd", edm::InputTag("trackExtenderWithMTD:generalTrackBeta"));
0070 desc.add<edm::InputTag>("pathmtd", edm::InputTag("trackExtenderWithMTD:generalTrackPathLength"));
0071 desc.add<edm::InputTag>("mvaquality", edm::InputTag("mtdTrackQualityMVA:mtdQualMVA"));
0072 desc.add<edm::InputTag>("posmtd", edm::InputTag("trackExtenderWithMTD:generalTrackmtdpos"));
0073 desc.add<edm::InputTag>("momentum", edm::InputTag("trackExtenderWithMTD:generalTrackp"));
0074 desc.add<edm::InputTag>("probPi", edm::InputTag("tofPID:probPi"));
0075 desc.add<edm::InputTag>("probK", edm::InputTag("tofPID:probK"));
0076 desc.add<edm::InputTag>("probP", edm::InputTag("tofPID:probP"));
0077
0078 descriptions.add("mtdSoAProducer", desc);
0079 }
0080
0081 void MTDSoAProducer::produce(edm::Event& ev, const edm::EventSetup& es) {
0082 edm::Handle<reco::TrackCollection> tracksH;
0083 ev.getByToken(tracksToken_, tracksH);
0084 const auto& tracks = *tracksH;
0085
0086 const auto& trackAssoc = ev.get(trackAssocToken_);
0087
0088 const auto& t0 = ev.get(t0Token_);
0089 const auto& sigmat0 = ev.get(sigmat0Token_);
0090
0091 const auto& tmtd = ev.get(tmtdToken_);
0092 const auto& sigmatmtd = ev.get(sigmatmtdToken_);
0093
0094 const auto& beta = ev.get(betaToken_);
0095 const auto& path = ev.get(pathToken_);
0096 const auto& MVAquality = ev.get(MVAQualityToken_);
0097 const auto& posInMTD = ev.get(posInMtdToken_);
0098 const auto& momentum = ev.get(momentumWithMTDToken_);
0099 const auto& probPi = ev.get(probPiToken_);
0100 const auto& probK = ev.get(probKToken_);
0101 const auto& probP = ev.get(probPToken_);
0102
0103 auto MtdInfo = std::make_unique<MtdHostCollection>(tracks.size(), cms::alpakatools::host());
0104
0105 auto& MtdInfoView = MtdInfo->view();
0106 for (unsigned int iTrack = 0; iTrack < tracks.size(); ++iTrack) {
0107 const reco::TrackRef trackref(tracksH, iTrack);
0108
0109 if (trackAssoc[trackref] == -1) {
0110 MtdInfoView.trackAsocMTD()[iTrack] = -1;
0111 MtdInfoView.time0()[iTrack] = 0.f;
0112 MtdInfoView.time0Err()[iTrack] = -1.f;
0113 MtdInfoView.time()[iTrack] = 0.f;
0114 MtdInfoView.timeErr()[iTrack] = -1.f;
0115 MtdInfoView.MVAquality()[iTrack] = 0.f;
0116 MtdInfoView.pathLength()[iTrack] = 0.f;
0117 MtdInfoView.beta()[iTrack] = 0.f;
0118 MtdInfoView.posInMTD_x()[iTrack] = 0.f;
0119 MtdInfoView.posInMTD_y()[iTrack] = 0.f;
0120 MtdInfoView.posInMTD_z()[iTrack] = 0.f;
0121 MtdInfoView.momentumWithMTD()[iTrack] = 0.f;
0122 MtdInfoView.probPi()[iTrack] = 0.f;
0123 MtdInfoView.probK()[iTrack] = 0.f;
0124 MtdInfoView.probP()[iTrack] = 0.f;
0125 continue;
0126 }
0127
0128 MtdInfoView.trackAsocMTD()[iTrack] = trackAssoc[trackref];
0129 MtdInfoView.time0()[iTrack] = t0[trackref];
0130 MtdInfoView.time0Err()[iTrack] = sigmat0[trackref];
0131 MtdInfoView.time()[iTrack] = tmtd[trackref];
0132 MtdInfoView.timeErr()[iTrack] = sigmatmtd[trackref];
0133 MtdInfoView.MVAquality()[iTrack] = MVAquality[trackref];
0134 MtdInfoView.pathLength()[iTrack] = path[trackref];
0135 MtdInfoView.beta()[iTrack] = beta[trackref];
0136 MtdInfoView.posInMTD_x()[iTrack] = posInMTD[trackref].x();
0137 MtdInfoView.posInMTD_y()[iTrack] = posInMTD[trackref].y();
0138 MtdInfoView.posInMTD_z()[iTrack] = posInMTD[trackref].z();
0139 MtdInfoView.momentumWithMTD()[iTrack] = momentum[trackref];
0140 MtdInfoView.probPi()[iTrack] = probPi[trackref];
0141 MtdInfoView.probK()[iTrack] = probK[trackref];
0142 MtdInfoView.probP()[iTrack] = probP[trackref];
0143 }
0144
0145 ev.put(std::move(MtdInfo));
0146 }
0147
0148
0149 #include <FWCore/Framework/interface/MakerMacros.h>
0150 DEFINE_FWK_MODULE(MTDSoAProducer);