File indexing completed on 2024-04-06 12:13:09
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 @example_myparticle#include "DataFormats/Candidate/interface/Particle.h"
0033 @example_myparticle#include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
0034 @example_myparticle#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
0035 @example_myparticle#include "DataFormats/MuonReco/interface/Muon.h"
0036 @example_myparticle#include "DataFormats/MuonReco/interface/MuonFwd.h"
0037 @example_myparticle#include "FWCore/MessageLogger/interface/MessageLogger.h"
0038 @example_myparticle#include "FWCore/Utilities/interface/InputTag.h"
0039 @example_myparticle
0040
0041
0042
0043
0044 class __class__ : public edm::stream::EDProducer<> {
0045 public:
0046 explicit __class__(const edm::ParameterSet&);
0047 ~__class__() override;
0048
0049 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0050
0051 private:
0052 void beginStream(edm::StreamID) override;
0053 void produce(edm::Event&, const edm::EventSetup&) override;
0054 void endStream() override;
0055
0056
0057
0058
0059
0060
0061 @example_myparticle
0062 @example_myparticle typedef std::vector<reco::Particle> MyParticleCollection;
0063 @example_myparticle
0064
0065 @example_myparticle edm::EDGetTokenT<reco::MuonCollection> muonToken_;
0066 @example_myparticle edm::EDGetTokenT<reco::GsfElectronCollection> electronToken_;
0067 @example_myparticle edm::EDPutTokenT<MyParticleCollection> putToken_;
0068 };
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081 @default__class__::__class__(const edm::ParameterSet& iConfig) {
0082 @example_myparticle__class__::__class__(const edm::ParameterSet& iConfig)
0083 @example_myparticle : muonToken_(consumes<reco::MuonCollection>(iConfig.getParameter<edm::InputTag>("muons"))),
0084 @example_myparticle electronToken_(consumes<reco::GsfElectronCollection>(iConfig.getParameter<edm::InputTag>("electrons"))),
0085 @example_myparticle putToken_(produces<MyParticleCollection>("particles")) {
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097 }
0098
0099 __class__::~__class__() {
0100
0101
0102
0103
0104 }
0105
0106
0107
0108
0109
0110
0111 void __class__::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0112 using namespace edm;
0113 @example_myparticle using namespace reco;
0114 @example_myparticle using namespace std;
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128 @example_myparticle
0129 @example_myparticle auto const& muons = iEvent.get(muonToken_);
0130 @example_myparticle auto const& electrons = iEvent.get(electronToken_);
0131 @example_myparticle
0132 @example_myparticle
0133 @example_myparticle auto newParticles = std::make_unique<MyParticleCollection>();
0134 @example_myparticle
0135 @example_myparticle
0136 @example_myparticle if (muons.size() == 4 || electrons.size() == 4 || (muons.size() == 2 && electrons.size() == 2)) {
0137 @example_myparticle
0138 @example_myparticle Particle::LorentzVector totalP4(0, 0, 0, 0);
0139 @example_myparticle Particle::Charge charge(0);
0140 @example_myparticle
0141 @example_myparticle
0142 @example_myparticle for (auto const& muon : muons) {
0143 @example_myparticle totalP4 += muon.p4();
0144 @example_myparticle charge += muon.charge();
0145 @example_myparticle }
0146 @example_myparticle
0147 @example_myparticle for (auto const& electron : electrons) {
0148 @example_myparticle totalP4 += electron.p4();
0149 @example_myparticle charge += electron.charge();
0150 @example_myparticle }
0151 @example_myparticle
0152 @example_myparticle
0153 @example_myparticle newParticles->emplace_back(charge, totalP4);
0154 @example_myparticle }
0155 @example_myparticle
0156 @example_myparticle
0157 @example_myparticle iEvent.put(putToken_, move(newParticles));
0158 }
0159
0160
0161 void __class__::beginStream(edm::StreamID) {
0162
0163 }
0164
0165
0166 void __class__::endStream() {
0167
0168 }
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203 void __class__::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0204
0205
0206 edm::ParameterSetDescription desc;
0207 desc.setUnknown();
0208 descriptions.addDefault(desc);
0209 @example_myparticle
0210 @example_myparticle
0211 @example_myparticle
0212 @example_myparticle
0213 @example_myparticle
0214 @example_myparticle
0215 @example_myparticle
0216 }
0217
0218
0219 DEFINE_FWK_MODULE(__class__);