79 pfJetPtCut(iConfig.getParameter<double>(
"pfJetPtCut")),
80 pfJetEtaCut(iConfig.getParameter<double>(
"pfJetEtaCut")),
84 doMet(iConfig.getParameter<
bool>(
"doMet")) {
86 produces<ScoutingPFJetCollection>();
87 produces<ScoutingParticleCollection>();
88 produces<double>(
"rho");
89 produces<double>(
"pfMetPt");
90 produces<double>(
"pfMetPhi");
103 for (
auto &
vtx : *vertexCollection) {
104 outVertices->emplace_back(
vtx.x(),
119 std::unique_ptr<double> outRho(
new double(-999));
121 outRho.reset(
new double(*rho));
126 std::unique_ptr<double> outMetPt(
new double(-999));
127 std::unique_ptr<double> outMetPhi(
new double(-999));
129 outMetPt.reset(
new double(metCollection->front().pt()));
130 outMetPhi.reset(
new double(metCollection->front().phi()));
137 for (
auto &
cand : *pfCandidateCollection) {
139 int vertex_index = -1;
140 int index_counter = 0;
142 for (
auto &
vtx : *outVertices) {
146 vertex_index = index_counter;
152 outPFCandidates->emplace_back(
cand.pt(),
cand.eta(),
cand.phi(),
cand.mass(),
cand.pdgId(), vertex_index);
163 bool haveJetTags =
false;
168 for (
auto &
jet : *pfJetCollection) {
172 float tagValue = -20;
175 for (
auto &
tag : *pfJetTagCollection) {
179 tagValue =
tag.second;
184 std::vector<int> candIndices;
186 for (
auto &
cand :
jet.getPFConstituents()) {
189 float minDR2 = 0.0001;
192 for (
auto &outCand : *outPFCandidates) {
193 float dR2 =
pow(
cand->eta() - outCand.eta(), 2) +
pow(
cand->phi() - outCand.phi(), 2);
196 matchIndex = outIndex;
203 candIndices.push_back(matchIndex);
207 outPFJets->emplace_back(
jet.pt(),
212 jet.chargedHadronEnergy(),
213 jet.neutralHadronEnergy(),
215 jet.electronEnergy(),
217 jet.HFHadronEnergy(),
219 jet.chargedHadronMultiplicity(),
220 jet.neutralHadronMultiplicity(),
221 jet.photonMultiplicity(),
222 jet.electronMultiplicity(),
223 jet.muonMultiplicity(),
224 jet.HFHadronMultiplicity(),
225 jet.HFEMMultiplicity(),
250 desc.
add<
double>(
"pfJetPtCut", 20.0);
251 desc.
add<
double>(
"pfJetEtaCut", 3.0);
252 desc.
add<
double>(
"pfCandidatePtCut", 0.6);
253 desc.
add<
bool>(
"doJetTags",
true);
254 desc.
add<
bool>(
"doCandidates",
true);
255 desc.
add<
bool>(
"doMet",
true);
256 descriptions.
add(
"hltScoutingPFProducer", desc);
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
const edm::EDGetTokenT< reco::PFMETCollection > metCollection_
~HLTScoutingPFProducer() override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< Vertex > VertexCollection
collection of Vertex objects
JetFloatAssociation::Container JetTagCollection
const edm::EDGetTokenT< reco::PFCandidateCollection > pfCandidateCollection_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const edm::EDGetTokenT< reco::VertexCollection > vertexCollection_
void produce(edm::StreamID sid, edm::Event &iEvent, edm::EventSetup const &setup) const final
#define DEFINE_FWK_MODULE(type)
std::vector< ScoutingVertex > ScoutingVertexCollection
std::vector< ScoutingParticle > ScoutingParticleCollection
const edm::EDGetTokenT< reco::PFJetCollection > pfJetCollection_
HLTScoutingPFProducer(const edm::ParameterSet &)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
const edm::EDGetTokenT< reco::JetTagCollection > pfJetTagCollection_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
const edm::EDGetTokenT< double > rho_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::vector< PFJet > PFJetCollection
collection of PFJet objects
std::vector< ScoutingPFJet > ScoutingPFJetCollection
Power< A, B >::type pow(const A &a, const B &b)
const double pfCandidatePtCut