File indexing completed on 2023-10-25 09:58:44
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021
0022
0023 #include "FWCore/Framework/interface/Frameworkfwd.h"
0024 #include "FWCore/Framework/interface/stream/EDProducer.h"
0025
0026 #include "FWCore/Framework/interface/Event.h"
0027 #include "FWCore/Framework/interface/MakerMacros.h"
0028
0029 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0030 #include "FWCore/Utilities/interface/StreamID.h"
0031
0032 #include "DataFormats/BTauReco/interface/CandIPTagInfo.h"
0033 #include "DataFormats/BTauReco/interface/CandSecondaryVertexTagInfo.h"
0034 #include "DataFormats/BTauReco/interface/ShallowTagInfo.h"
0035 #include "DataFormats/BTauReco/interface/TaggingVariable.h"
0036 #include "RecoBTag/SecondaryVertex/interface/CombinedSVComputer.h"
0037
0038 #include "DataFormats/BTauReco/interface/TrackIPTagInfo.h"
0039 #include "DataFormats/BTauReco/interface/SecondaryVertexTagInfo.h"
0040
0041 #include <map>
0042
0043
0044
0045
0046
0047
0048
0049 template <typename IPTag, typename SVTag>
0050 class TemplatedDeepNNTagInfoProducer : public edm::stream::EDProducer<> {
0051 public:
0052 explicit TemplatedDeepNNTagInfoProducer(const edm::ParameterSet&);
0053 ~TemplatedDeepNNTagInfoProducer() override;
0054
0055 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0056
0057 private:
0058 void beginStream(edm::StreamID) override {}
0059 void produce(edm::Event&, const edm::EventSetup&) override;
0060 void endStream() override {}
0061
0062
0063 const edm::EDGetTokenT<std::vector<SVTag> > svSrc_;
0064 CombinedSVComputer computer_;
0065 };
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078 template <typename IPTag, typename SVTag>
0079 TemplatedDeepNNTagInfoProducer<IPTag, SVTag>::TemplatedDeepNNTagInfoProducer(const edm::ParameterSet& iConfig)
0080 : svSrc_(consumes<std::vector<SVTag> >(iConfig.getParameter<edm::InputTag>("svTagInfos"))),
0081 computer_(iConfig.getParameter<edm::ParameterSet>("computer")) {
0082 produces<std::vector<reco::ShallowTagInfo> >();
0083 }
0084
0085 template <typename IPTag, typename SVTag>
0086 TemplatedDeepNNTagInfoProducer<IPTag, SVTag>::~TemplatedDeepNNTagInfoProducer() {
0087
0088
0089 }
0090
0091
0092
0093
0094
0095
0096 template <typename IPTag, typename SVTag>
0097 void TemplatedDeepNNTagInfoProducer<IPTag, SVTag>::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0098
0099 edm::Handle<std::vector<SVTag> > svTagInfos;
0100 iEvent.getByToken(svSrc_, svTagInfos);
0101
0102
0103 auto tagInfos = std::make_unique<std::vector<reco::ShallowTagInfo> >();
0104
0105
0106 for (auto iterTI = svTagInfos->begin(); iterTI != svTagInfos->end(); ++iterTI) {
0107
0108 const SVTag& svTagInfo = *(iterTI);
0109 const IPTag& ipInfo = *(iterTI->trackIPTagInfoRef().get());
0110
0111 reco::TaggingVariableList vars = computer_(ipInfo, svTagInfo);
0112 std::vector<float> tagValList = vars.getList(reco::btau::trackEtaRel, false);
0113 vars.insert(reco::btau::jetNTracksEtaRel, tagValList.size());
0114 tagValList = vars.getList(reco::btau::trackSip2dSig, false);
0115 vars.insert(reco::btau::jetNSelectedTracks, tagValList.size());
0116 vars.finalize();
0117
0118
0119 if (!vars.checkTag(reco::btau::jetNSecondaryVertices))
0120 vars.insert(reco::btau::jetNSecondaryVertices, 0);
0121 if (!vars.checkTag(reco::btau::vertexNTracks))
0122 vars.insert(reco::btau::vertexNTracks, 0);
0123
0124 tagInfos->emplace_back(vars, svTagInfo.jet());
0125 }
0126
0127
0128 iEvent.put(std::move(tagInfos));
0129 }
0130
0131
0132 template <typename IPTag, typename SVTag>
0133 void TemplatedDeepNNTagInfoProducer<IPTag, SVTag>::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0134
0135
0136 edm::ParameterSetDescription desc;
0137 desc.setUnknown();
0138 descriptions.addDefault(desc);
0139 }
0140
0141
0142
0143 typedef TemplatedDeepNNTagInfoProducer<reco::CandIPTagInfo, reco::CandSecondaryVertexTagInfo> DeepNNTagInfoProducer;
0144
0145 typedef TemplatedDeepNNTagInfoProducer<reco::TrackIPTagInfo, reco::SecondaryVertexTagInfo> TrackDeepNNTagInfoProducer;
0146 DEFINE_FWK_MODULE(DeepNNTagInfoProducer);
0147 DEFINE_FWK_MODULE(TrackDeepNNTagInfoProducer);