File indexing completed on 2024-04-06 12:24:01
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/global/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
0031 #include "DataFormats/PatCandidates/interface/CompositeCandidate.h"
0032 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h"
0033 #include "DataFormats/PatCandidates/interface/Muon.h"
0034 #include "DataFormats/TrackReco/interface/Track.h"
0035 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0036 #include "CommonTools/CandUtils/interface/AddFourMomenta.h"
0037 #include "DataFormats/Math/interface/deltaR.h"
0038
0039 #include <TLorentzVector.h>
0040
0041 #include <vector>
0042
0043
0044
0045
0046
0047 class PatJPsiProducer : public edm::global::EDProducer<> {
0048 public:
0049 explicit PatJPsiProducer(const edm::ParameterSet&);
0050
0051 private:
0052 void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
0053
0054
0055
0056 edm::EDGetTokenT<edm::View<pat::Muon>> muonSrcToken_;
0057 };
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070 PatJPsiProducer::PatJPsiProducer(const edm::ParameterSet& iConfig)
0071 : muonSrcToken_(consumes<edm::View<pat::Muon>>(iConfig.getParameter<edm::InputTag>("muonSrc"))) {
0072 produces<std::vector<pat::CompositeCandidate>>();
0073 }
0074
0075
0076
0077
0078
0079
0080 void PatJPsiProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0081 auto jpsiCands = std::make_unique<std::vector<pat::CompositeCandidate>>();
0082 edm::Handle<edm::View<pat::Muon>> h_muons;
0083 iEvent.getByToken(muonSrcToken_, h_muons);
0084
0085
0086 const double JPSI_MASS = 3.097;
0087
0088 if (h_muons.isValid() && h_muons->size() > 1) {
0089 for (edm::View<pat::Muon>::const_iterator muonsBegin = h_muons->begin(),
0090 muonsEnd = h_muons->end(),
0091 imuon = muonsBegin;
0092 imuon != muonsEnd - 1;
0093 ++imuon) {
0094 if (imuon->pt() > 1.0) {
0095 for (edm::View<pat::Muon>::const_iterator jmuon = imuon + 1; jmuon != muonsEnd; ++jmuon) {
0096 if (imuon->charge() * jmuon->charge() < 0) {
0097 pat::CompositeCandidate jpsi;
0098 jpsi.addDaughter(*imuon, "mu1");
0099 jpsi.addDaughter(*jmuon, "mu2");
0100
0101 AddFourMomenta addp4;
0102 addp4.set(jpsi);
0103
0104 double dR = reco::deltaR<pat::Muon, pat::Muon>(*imuon, *jmuon);
0105
0106 jpsi.addUserFloat("dR", dR);
0107
0108 if (fabs(jpsi.mass() - JPSI_MASS) < 1.0) {
0109 jpsiCands->push_back(jpsi);
0110 }
0111 }
0112 }
0113 }
0114 }
0115 }
0116
0117 iEvent.put(std::move(jpsiCands));
0118 }
0119
0120
0121 DEFINE_FWK_MODULE(PatJPsiProducer);