31 static std::unique_ptr<ONNXRuntime> initializeGlobalCache(
const edm::ParameterSet&);
52 unsigned kGlobal, kNeutralCandidates, kChargedCandidates,
kVertices;
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")),
67 version_(iConfig.getParameter<
std::
string>(
"version")),
68 debug_(iConfig.getUntrackedParameter<
bool>(
"debugMode",
false)) {
71 produces<JetTagCollection>(flav_name);
107 desc.
add<std::vector<std::string>>(
"input_names", {
"input_1",
"input_2",
"input_3"});
108 desc.
add<std::vector<std::string>>(
"output_names", {});
116 auto flavorCases = [&]() {
117 return "BvL" >> (PDPSD(
"flav_names", std::vector<std::string>{
"probQCD",
"probHbb"},
true) and
118 PDFIP(
"model_path", FIP(
"RecoBTag/Combined/data/DeepDoubleX/94X/V01/DDB.onnx"),
true))
or 119 "CvL" >> (PDPSD(
"flav_names", std::vector<std::string>{
"probQCD",
"probHcc"},
true) and
120 PDFIP(
"model_path", FIP(
"RecoBTag/Combined/data/DeepDoubleX/94X/V01/DDC.onnx"),
true))
or 121 "CvB" >> (PDPSD(
"flav_names", std::vector<std::string>{
"probHbb",
"probHcc"},
true) and
122 PDFIP(
"model_path", FIP(
"RecoBTag/Combined/data/DeepDoubleX/94X/V01/DDCvB.onnx"),
true));
126 descriptions.
add(
"pfDeepDoubleBvLJetTags", descBvL);
130 descriptions.
add(
"pfDeepDoubleCvLJetTags", descCvL);
134 descriptions.
add(
"pfDeepDoubleCvBJetTags", descCvB);
147 std::vector<std::unique_ptr<JetTagCollection>> output_tags;
148 if (!tag_infos->empty()) {
150 auto jet_ref = tag_infos->begin()->jet();
153 output_tags.emplace_back(std::make_unique<JetTagCollection>(ref2prod));
157 auto batch_size = std::count_if(
158 tag_infos->begin(), tag_infos->end(), [](
const auto&
taginfo) {
return !
taginfo.features().empty(); });
160 std::vector<float> etas_debug;
162 if (batch_size > 0) {
166 data_.emplace_back(batch_size * len, 0);
171 for (
const auto&
taginfo : *tag_infos) {
172 if (!
taginfo.features().empty()) {
175 etas_debug.push_back(
taginfo.jet()->eta());
188 outfile.open(
"test.txt", std::ios_base::app);
189 outfile << iEvent.
id().
event() << std::endl;
190 outfile << batch_size << std::endl;
191 for (
float x : etas_debug)
193 outfile << std::endl;
195 for (
const std::vector<float>&
v :
data_) {
196 outfile <<
"input_" << _i << std::endl;
199 outfile << std::endl;
202 outfile <<
"outputs" << std::endl;
203 for (
float x : outputs)
205 outfile << std::endl;
208 assert(outputs.size() ==
flav_names_.size() * batch_size);
212 unsigned i_output = 0;
213 for (
unsigned jet_n = 0; jet_n < tag_infos->size(); ++jet_n) {
214 const auto&
taginfo = tag_infos->at(jet_n);
215 const auto& jet_ref =
taginfo.jet();
216 for (std::size_t flav_n = 0; flav_n <
flav_names_.size(); flav_n++) {
217 if (!
taginfo.features().empty()) {
218 (*(output_tags[flav_n]))[jet_ref] = outputs[i_output];
221 (*(output_tags[flav_n]))[jet_ref] = -1.;
228 output_tags.emplace_back(std::make_unique<JetTagCollection>());
233 for (std::size_t flav_n = 0; flav_n <
flav_names_.size(); ++flav_n) {
240 float* ptr =
nullptr;
241 const float*
start =
nullptr;
248 const auto& tag_info_features =
features.tag_info_features;
249 *ptr = tag_info_features.jetNTracks;
251 *(++ptr) = tag_info_features.jetNSecondaryVertices;
253 *(++ptr) = tag_info_features.tau1_trackEtaRel_0;
254 *(++ptr) = tag_info_features.tau1_trackEtaRel_1;
256 *(++ptr) = tag_info_features.tau1_trackEtaRel_2;
257 *(++ptr) = tag_info_features.tau2_trackEtaRel_0;
258 *(++ptr) = tag_info_features.tau2_trackEtaRel_1;
259 *(++ptr) = tag_info_features.tau2_trackEtaRel_2;
260 *(++ptr) = tag_info_features.tau1_flightDistance2dSig;
261 *(++ptr) = tag_info_features.tau2_flightDistance2dSig;
263 *(++ptr) = tag_info_features.tau1_vertexDeltaR;
264 *(++ptr) = tag_info_features.tau1_vertexEnergyRatio;
266 *(++ptr) = tag_info_features.tau2_vertexEnergyRatio;
267 *(++ptr) = tag_info_features.tau1_vertexMass;
268 *(++ptr) = tag_info_features.tau2_vertexMass;
269 *(++ptr) = tag_info_features.trackSip2dSigAboveBottom_0;
270 *(++ptr) = tag_info_features.trackSip2dSigAboveBottom_1;
271 *(++ptr) = tag_info_features.trackSip2dSigAboveCharm;
272 *(++ptr) = tag_info_features.trackSip3dSig_0;
273 *(++ptr) = tag_info_features.tau1_trackSip3dSig_0;
274 *(++ptr) = tag_info_features.tau1_trackSip3dSig_1;
275 *(++ptr) = tag_info_features.trackSip3dSig_1;
276 *(++ptr) = tag_info_features.tau2_trackSip3dSig_0;
277 *(++ptr) = tag_info_features.tau2_trackSip3dSig_1;
278 *(++ptr) = tag_info_features.trackSip3dSig_2;
279 *(++ptr) = tag_info_features.trackSip3dSig_3;
280 *(++ptr) = tag_info_features.z_ratio;
287 for (std::size_t c_pf_n = 0; c_pf_n < max_c_pf_n; c_pf_n++) {
288 const auto& c_pf_features =
features.c_pf_features.at(c_pf_n);
291 *ptr = c_pf_features.btagPf_trackEtaRel;
293 *(++ptr) = c_pf_features.btagPf_trackPtRatio;
294 *(++ptr) = c_pf_features.btagPf_trackPParRatio;
295 *(++ptr) = c_pf_features.btagPf_trackSip2dVal;
296 *(++ptr) = c_pf_features.btagPf_trackSip2dSig;
297 *(++ptr) = c_pf_features.btagPf_trackSip3dVal;
298 *(++ptr) = c_pf_features.btagPf_trackSip3dSig;
299 *(++ptr) = c_pf_features.btagPf_trackJetDistVal;
301 *(++ptr) = c_pf_features.btagPf_trackJetDistVal;
302 *(++ptr) = c_pf_features.btagPf_trackPParRatio;
303 *(++ptr) = c_pf_features.btagPf_trackPtRatio;
304 *(++ptr) = c_pf_features.btagPf_trackSip2dSig;
305 *(++ptr) = c_pf_features.btagPf_trackSip2dVal;
306 *(++ptr) = c_pf_features.btagPf_trackSip3dSig;
307 *(++ptr) = c_pf_features.btagPf_trackSip3dVal;
308 *(++ptr) = c_pf_features.deltaR;
309 *(++ptr) = c_pf_features.drminsv;
310 *(++ptr) = c_pf_features.drsubjet1;
311 *(++ptr) = c_pf_features.drsubjet2;
312 *(++ptr) = c_pf_features.dxy;
313 *(++ptr) = c_pf_features.dxysig;
314 *(++ptr) = c_pf_features.dz;
315 *(++ptr) = c_pf_features.dzsig;
316 *(++ptr) = c_pf_features.erel;
317 *(++ptr) = c_pf_features.etarel;
318 *(++ptr) = c_pf_features.chi2;
319 *(++ptr) = c_pf_features.ptrel_noclip;
320 *(++ptr) = c_pf_features.quality;
330 for (std::size_t n_pf_n = 0; n_pf_n < max_n_pf_n; n_pf_n++) {
331 const auto& n_pf_features =
features.n_pf_features.at(n_pf_n);
334 *ptr = n_pf_features.deltaR_noclip;
335 *(++ptr) = n_pf_features.drminsv;
336 *(++ptr) = n_pf_features.drsubjet1;
337 *(++ptr) = n_pf_features.drsubjet2;
338 *(++ptr) = n_pf_features.erel;
339 *(++ptr) = n_pf_features.hadFrac;
340 *(++ptr) = n_pf_features.ptrel_noclip;
341 *(++ptr) = n_pf_features.puppiw;
348 offset = i_jet * input_sizes_[
kVertices];
349 for (std::size_t sv_n = 0; sv_n < max_sv_n; sv_n++) {
350 const auto& sv_features =
features.sv_features.at(sv_n);
354 *ptr = sv_features.d3d;
355 *(++ptr) = sv_features.d3dsig;
357 *ptr = sv_features.costhetasvpv;
358 *(++ptr) = sv_features.deltaR;
359 *(++ptr) = sv_features.dxysig;
360 *(++ptr) = sv_features.mass;
361 *(++ptr) = sv_features.ntracks;
362 *(++ptr) = sv_features.pt;
363 *(++ptr) = sv_features.ptrel;
const Features & features() const
T getParameter(std::string const &) const
EventNumber_t event() 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)
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::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
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)