Back to home page

Project CMSSW displayed by LXR

 
 

    


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 // Configuration descriptions
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 //define this as a plug-in
0149 #include <FWCore/Framework/interface/MakerMacros.h>
0150 DEFINE_FWK_MODULE(MTDSoAProducer);