File indexing completed on 2024-04-06 12:30:33
0001
0002
0003
0004
0005
0006 #include "DataFormats/Common/interface/Handle.h"
0007 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0008 #include <map>
0009 #include <memory>
0010
0011 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
0012
0013
0014 #include "DataMixingPileupCopy.h"
0015
0016 using namespace std;
0017
0018 namespace edm {
0019
0020
0021
0022 DataMixingPileupCopy::DataMixingPileupCopy() {}
0023
0024
0025 DataMixingPileupCopy::DataMixingPileupCopy(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC)
0026 : label_(ps.getParameter<std::string>("Label"))
0027
0028 {
0029
0030
0031 PileupInfoInputTag_ = ps.getParameter<edm::InputTag>("PileupInfoInputTag");
0032 BunchSpacingInputTag_ = ps.getParameter<edm::InputTag>("BunchSpacingInputTag");
0033 CFPlaybackInputTag_ = ps.getParameter<edm::InputTag>("CFPlaybackInputTag");
0034
0035 GenPUProtonsInputTags_ = ps.getParameter<std::vector<edm::InputTag>>("GenPUProtonsInputTags");
0036
0037
0038
0039
0040
0041 }
0042
0043
0044 DataMixingPileupCopy::~DataMixingPileupCopy() {}
0045
0046 void DataMixingPileupCopy::addPileupInfo(const EventPrincipal *ep,
0047 unsigned int eventNr,
0048 ModuleCallingContext const *mcc) {
0049 LogDebug("DataMixingPileupCopy") << "\n===============> adding pileup Info from event " << ep->id();
0050
0051
0052
0053
0054
0055 std::shared_ptr<Wrapper<std::vector<PileupSummaryInfo>> const> PileupInfoPTR =
0056 getProductByTag<std::vector<PileupSummaryInfo>>(*ep, PileupInfoInputTag_, mcc);
0057
0058 std::shared_ptr<Wrapper<int> const> bsPTR = getProductByTag<int>(*ep, BunchSpacingInputTag_, mcc);
0059
0060 if (PileupInfoPTR) {
0061 PileupSummaryStorage_ = *(PileupInfoPTR->product());
0062 LogDebug("DataMixingEMWorker") << "PileupInfo Size: " << PileupSummaryStorage_.size();
0063 }
0064
0065 if (bsPTR) {
0066 bsStorage_ = *(bsPTR->product());
0067 } else {
0068 bsStorage_ = 10000;
0069 }
0070
0071
0072 std::shared_ptr<edm::Wrapper<std::vector<reco::GenParticle>> const> GenPUProtonsPTR;
0073 for (std::vector<edm::InputTag>::const_iterator it_InputTag = GenPUProtonsInputTags_.begin();
0074 it_InputTag != GenPUProtonsInputTags_.end();
0075 ++it_InputTag) {
0076 GenPUProtonsPTR = getProductByTag<std::vector<reco::GenParticle>>(*ep, *it_InputTag, mcc);
0077 if (GenPUProtonsPTR != nullptr) {
0078 GenPUProtons_.push_back(*(GenPUProtonsPTR->product()));
0079 GenPUProtons_labels_.push_back(it_InputTag->label());
0080 } else
0081 edm::LogWarning("DataMixingPileupCopy") << "Missing product with label: " << (*it_InputTag).label();
0082 }
0083
0084
0085 std::shared_ptr<Wrapper<CrossingFramePlaybackInfoNew> const> PlaybackPTR =
0086 getProductByTag<CrossingFramePlaybackInfoNew>(*ep, CFPlaybackInputTag_, mcc);
0087 FoundPlayback_ = false;
0088 if (PlaybackPTR) {
0089 CrossingFramePlaybackStorage_ = *(PlaybackPTR->product());
0090 FoundPlayback_ = true;
0091 }
0092 }
0093
0094 void DataMixingPileupCopy::putPileupInfo(edm::Event &e) {
0095 std::unique_ptr<std::vector<PileupSummaryInfo>> PSIVector(new std::vector<PileupSummaryInfo>);
0096 std::unique_ptr<int> bsInt(new int);
0097
0098 std::vector<PileupSummaryInfo>::const_iterator PSiter;
0099 for (PSiter = PileupSummaryStorage_.begin(); PSiter != PileupSummaryStorage_.end(); PSiter++) {
0100 PSIVector->push_back(*PSiter);
0101 }
0102
0103 *bsInt = bsStorage_;
0104
0105 if (FoundPlayback_) {
0106 std::unique_ptr<CrossingFramePlaybackInfoNew> CFPlaybackInfo(
0107 new CrossingFramePlaybackInfoNew(CrossingFramePlaybackStorage_));
0108 e.put(std::move(CFPlaybackInfo));
0109 }
0110 e.put(std::move(PSIVector));
0111 e.put(std::move(bsInt), "bunchSpacing");
0112
0113
0114 for (size_t idx = 0; idx < GenPUProtons_.size(); ++idx) {
0115 std::unique_ptr<std::vector<reco::GenParticle>> GenPUProtons_ptr(new std::vector<reco::GenParticle>());
0116 std::vector<reco::GenParticle>::const_iterator it_GenParticle = GenPUProtons_.at(idx).begin();
0117 std::vector<reco::GenParticle>::const_iterator it_GenParticle_end = GenPUProtons_.at(idx).end();
0118 for (; it_GenParticle != it_GenParticle_end; ++it_GenParticle)
0119 GenPUProtons_ptr->push_back(*it_GenParticle);
0120
0121 e.put(std::move(GenPUProtons_ptr), GenPUProtons_labels_.at(idx));
0122 }
0123
0124
0125 PileupSummaryStorage_.clear();
0126 GenPUProtons_.clear();
0127 GenPUProtons_labels_.clear();
0128 }
0129 }