47 maxDR_(iConfig.getParameter<double>(
"maxDR")) {
48 produces<edm::ValueMap<float>>(
"chargedFromPV0EnergyFraction");
49 produces<edm::ValueMap<float>>(
"chargedFromPV1EnergyFraction");
50 produces<edm::ValueMap<float>>(
"chargedFromPV2EnergyFraction");
51 produces<edm::ValueMap<float>>(
"chargedFromPV3EnergyFraction");
61 const std::vector<float> &
values,
78 unsigned int nJet = srcJet->size();
82 std::vector<double> jet2pue(nJet, 0);
83 for (
const auto &cand : *srcPF) {
84 if (cand.charge() == 0
or cand.fromPV() != 0)
88 int bestjet = -1, jetidx = 0;
89 for (
const auto &
jet : *srcJet) {
99 jet2pue[bestjet] += cand.energy();
102 std::vector<float> chargedFromPV0EnergyFraction(nJet, -1);
103 std::vector<float> chargedFromPV1EnergyFraction(nJet, -1);
104 std::vector<float> chargedFromPV2EnergyFraction(nJet, -1);
105 std::vector<float> chargedFromPV3EnergyFraction(nJet, -1);
107 for (
unsigned int ij = 0; ij < nJet; ++ij) {
108 auto vals = calculateCHSEnergies(srcJet->ptrAt(ij), jet2pue[ij]);
109 chargedFromPV0EnergyFraction[ij] = std::get<0>(vals);
110 chargedFromPV1EnergyFraction[ij] = std::get<1>(vals);
111 chargedFromPV2EnergyFraction[ij] = std::get<2>(vals);
112 chargedFromPV3EnergyFraction[ij] = std::get<3>(vals);
115 fillValueMaps(
"chargedFromPV0EnergyFraction", chargedFromPV0EnergyFraction, srcJet, iEvent);
116 fillValueMaps(
"chargedFromPV1EnergyFraction", chargedFromPV1EnergyFraction, srcJet, iEvent);
117 fillValueMaps(
"chargedFromPV2EnergyFraction", chargedFromPV2EnergyFraction, srcJet, iEvent);
118 fillValueMaps(
"chargedFromPV3EnergyFraction", chargedFromPV3EnergyFraction, srcJet, iEvent);
121 template <
typename T>
123 const std::vector<float> &
values,
128 valuesFiller.
insert(srcJet, values.begin(), values.end());
133 template <
typename T>
135 double chefrompv0)
const {
137 double chefrompv1 = 0.0;
138 double chefrompv2 = 0.0;
139 double chefrompv3 = 0.0;
143 for (
auto pidx = 0u; pidx < ijet->numberOfDaughters(); ++pidx) {
145 if (dtr->charge() == 0)
147 if (dtr->fromPV() == 1)
148 chefrompv1 += dtr->
energy();
149 else if (dtr->fromPV() == 2)
150 chefrompv2 += dtr->energy();
151 else if (dtr->fromPV() == 3)
152 chefrompv3 += dtr->energy();
156 auto rawP4 = ijet->correctedP4(0);
157 double chffpv0 = chefrompv0 / rawP4.energy();
158 double chffpv1 = chefrompv1 / rawP4.energy();
159 double chffpv2 = chefrompv2 / rawP4.energy();
160 double chffpv3 = chefrompv3 / rawP4.energy();
162 return std::tuple<float, float, float, float>(chffpv0, chffpv1, chffpv2, chffpv3);
165 template <
typename T>
169 desc.
add<
edm::InputTag>(
"srcPF")->setComment(
"PF candidate input collection");
170 desc.
add<
double>(
"maxDR")->setComment(
"Maximum DR to consider for jet-->pf cand association");
172 descriptions.
add(modname, desc);
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
void fillValueMaps(std::string valueName, const std::vector< float > &values, edm::Handle< edm::View< pat::Jet >> &srcJet, edm::Event &iEvent) const
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
BetaStarVarProducer< pat::PackedCandidate > BetaStarPackedCandidateVarProducer
void insert(const H &h, I begin, I end)
~BetaStarVarProducer() override
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::EDGetTokenT< edm::View< pat::Jet > > srcJet_
edm::EDGetTokenT< edm::View< T > > srcPF_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
std::tuple< float, float, float, float > calculateCHSEnergies(edm::Ptr< pat::Jet > const &jet, double chefrompv0) const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
BetaStarVarProducer(const edm::ParameterSet &iConfig)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
double energy() const override
energy