27 static std::unique_ptr<ONNXRuntime> initializeGlobalCache(
const edm::ParameterSet&);
43 enum InputIndexes { kGlobal = 0, kChargedCandidates = 1, kNeutralCandidates = 2, kVertices = 3, kJetPt = 4 };
59 n_features_global_, n_cpf_* n_features_cpf_, n_npf_* n_features_npf_, n_sv_* n_features_sv_, n_features_jetpt_};
64 flav_names_(iConfig.getParameter<
std::vector<
std::
string>>(
"flav_names")),
65 input_names_(iConfig.getParameter<
std::vector<
std::
string>>(
"input_names")),
66 output_names_(iConfig.getParameter<
std::vector<
std::
string>>(
"output_names")) {
69 produces<JetTagCollection>(flav_name);
81 desc.
add<std::vector<std::string>>(
"input_names", {
"input_1",
"input_2",
"input_3",
"input_4",
"input_5"});
83 edm::FileInPath(
"RecoBTag/Combined/data/DeepFlavourV03_10X_training/model.onnx"));
84 desc.
add<std::vector<std::string>>(
"output_names", {
"ID_pred/Softmax:0"});
85 desc.
add<std::vector<std::string>>(
86 "flav_names", std::vector<std::string>{
"probb",
"probbb",
"problepb",
"probc",
"probuds",
"probg"});
88 descriptions.
add(
"pfDeepFlavourJetTags", desc);
101 std::vector<std::unique_ptr<JetTagCollection>> output_tags;
102 if (!tag_infos->empty()) {
104 auto jet_ref = tag_infos->begin()->jet();
107 output_tags.emplace_back(std::make_unique<JetTagCollection>(ref2prod));
113 data_.emplace_back(tag_infos->size() * len, 0);
117 for (
unsigned jet_n = 0; jet_n < tag_infos->size(); ++jet_n) {
118 const auto&
taginfo = (*tag_infos)[jet_n];
127 unsigned i_output = 0;
128 for (
unsigned jet_n = 0; jet_n < tag_infos->size(); ++jet_n) {
129 const auto& jet_ref = tag_infos->at(jet_n).jet();
130 for (std::size_t flav_n = 0; flav_n <
flav_names_.size(); flav_n++) {
131 (*(output_tags[flav_n]))[jet_ref] =
outputs[i_output];
138 output_tags.emplace_back(std::make_unique<JetTagCollection>());
143 for (std::size_t flav_n = 0; flav_n <
flav_names_.size(); ++flav_n) {
150 float* ptr =
nullptr;
151 const float*
start =
nullptr;
158 const auto& jet_features =
features.jet_features;
160 *ptr = jet_features.pt;
161 *(++ptr) = jet_features.eta;
163 *(++ptr) =
features.c_pf_features.size();
164 *(++ptr) =
features.n_pf_features.size();
165 *(++ptr) =
features.sv_features.size();
168 const auto& tag_info_features =
features.tag_info_features;
169 *(++ptr) = tag_info_features.trackSumJetEtRatio;
170 *(++ptr) = tag_info_features.trackSumJetDeltaR;
171 *(++ptr) = tag_info_features.vertexCategory;
172 *(++ptr) = tag_info_features.trackSip2dValAboveCharm;
173 *(++ptr) = tag_info_features.trackSip2dSigAboveCharm;
174 *(++ptr) = tag_info_features.trackSip3dValAboveCharm;
175 *(++ptr) = tag_info_features.trackSip3dSigAboveCharm;
176 *(++ptr) = tag_info_features.jetNSelectedTracks;
177 *(++ptr) = tag_info_features.jetNTracksEtaRel;
183 for (std::size_t c_pf_n = 0; c_pf_n < max_c_pf_n; c_pf_n++) {
184 const auto& c_pf_features =
features.c_pf_features.at(c_pf_n);
187 *ptr = c_pf_features.btagPf_trackEtaRel;
188 *(++ptr) = c_pf_features.btagPf_trackPtRel;
189 *(++ptr) = c_pf_features.btagPf_trackPPar;
190 *(++ptr) = c_pf_features.btagPf_trackDeltaR;
191 *(++ptr) = c_pf_features.btagPf_trackPParRatio;
192 *(++ptr) = c_pf_features.btagPf_trackSip2dVal;
193 *(++ptr) = c_pf_features.btagPf_trackSip2dSig;
194 *(++ptr) = c_pf_features.btagPf_trackSip3dVal;
195 *(++ptr) = c_pf_features.btagPf_trackSip3dSig;
196 *(++ptr) = c_pf_features.btagPf_trackJetDistVal;
197 *(++ptr) = c_pf_features.ptrel;
198 *(++ptr) = c_pf_features.drminsv;
199 *(++ptr) = c_pf_features.vtx_ass;
200 *(++ptr) = c_pf_features.puppiw;
201 *(++ptr) = c_pf_features.chi2;
202 *(++ptr) = c_pf_features.quality;
209 for (std::size_t n_pf_n = 0; n_pf_n < max_n_pf_n; n_pf_n++) {
210 const auto& n_pf_features =
features.n_pf_features.at(n_pf_n);
213 *ptr = n_pf_features.ptrel;
214 *(++ptr) = n_pf_features.deltaR;
215 *(++ptr) = n_pf_features.isGamma;
216 *(++ptr) = n_pf_features.hadFrac;
217 *(++ptr) = n_pf_features.drminsv;
218 *(++ptr) = n_pf_features.puppiw;
224 offset = i_jet * input_sizes_[
kVertices];
225 for (std::size_t sv_n = 0; sv_n < max_sv_n; sv_n++) {
226 const auto& sv_features =
features.sv_features.at(sv_n);
229 *ptr = sv_features.pt;
230 *(++ptr) = sv_features.deltaR;
231 *(++ptr) = sv_features.mass;
232 *(++ptr) = sv_features.ntracks;
233 *(++ptr) = sv_features.chi2;
234 *(++ptr) = sv_features.normchi2;
235 *(++ptr) = sv_features.dxy;
236 *(++ptr) = sv_features.dxysig;
237 *(++ptr) = sv_features.d3d;
238 *(++ptr) = sv_features.d3dsig;
239 *(++ptr) = sv_features.costhetasvpv;
240 *(++ptr) = sv_features.enratio;
245 offset = i_jet * input_sizes_[
kJetPt];
const Features & features() const
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< std::vector< float > > FloatArrays
#define DEFINE_FWK_MODULE(type)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
RefToBaseProd< T > makeRefToBaseProdFrom(RefToBase< T > const &iRef, Event const &iEvent)