ATLAS Offline Software
Typedefs | Functions
FlavorTagDiscriminants::dataprep Namespace Reference

Typedefs

typedef std::vector< std::pair< std::regex, std::string > > StringRegexes
 

Functions

StringRegexes getNameFlippers (const FlipTagConfig &flip_config)
 
std::tuple< std::vector< FTagInputConfig >, std::vector< ConstituentsInputConfig >, FTagOptionscreateGetterConfig (lwt::GraphConfig &graph_config, FlipTagConfig flip_config, std::map< std::string, std::string > remap_scalar, TrackLinkType track_link_type)
 
std::tuple< std::vector< internal::VarFromBTag >, std::vector< internal::VarFromJet >, FTagDataDependencyNamescreateBvarGetters (const std::vector< FTagInputConfig > &inputs)
 
std::tuple< std::map< std::string, internal::OutNodeFloat >, FTagDataDependencyNames, std::set< std::string > > createDecorators (const lwt::GraphConfig &config, const FTagOptions &options)
 
std::tuple< std::function< char(const internal::Tracks &)>, std::vector< SG::AuxElement::Decorator< char > >, FTagDataDependencyNames, std::set< std::string > > createIpChecker (const lwt::GraphConfig &, const FTagOptions &)
 
void checkForUnusedRemaps (const std::map< std::string, std::string > &requested, const std::set< std::string > &used)
 

Typedef Documentation

◆ StringRegexes

typedef std::vector<std::pair<std::regex, std::string> > FlavorTagDiscriminants::dataprep::StringRegexes

Definition at line 148 of file DataPrepUtilities.h.

Function Documentation

◆ checkForUnusedRemaps()

void FlavorTagDiscriminants::dataprep::checkForUnusedRemaps ( const std::map< std::string, std::string > &  requested,
const std::set< std::string > &  used 
)

Definition at line 454 of file DataPrepUtilities.cxx.

457  {
458  // we want to make sure every remapping was used
459  std::set<std::string> unused;
460  for (auto [k, v]: requested) {
461  if (!used.count(k)) unused.insert(k);
462  }
463  if (unused.size() > 0) {
464  std::string outputs;
465  for (const auto& item: unused) {
466  outputs.append(item);
467  if (item != *unused.rbegin()) outputs.append(", ");
468  }
469  throw std::logic_error("found unused output remapping(s): " + outputs);
470  }
471  }

◆ createBvarGetters()

std::tuple< std::vector< internal::VarFromBTag >, std::vector< internal::VarFromJet >, FTagDataDependencyNames > FlavorTagDiscriminants::dataprep::createBvarGetters ( const std::vector< FTagInputConfig > &  inputs)

Definition at line 349 of file DataPrepUtilities.cxx.

351  {
353  std::vector<internal::VarFromBTag> varsFromBTag;
354  std::vector<internal::VarFromJet> varsFromJet;
355 
356  for (const auto& input: inputs) {
357  if (input.type != EDMType::CUSTOM_GETTER) {
358  auto filler = internal::get::varFromBTag(input.name, input.type,
359  input.default_flag);
360  deps.bTagInputs.insert(input.name);
361  varsFromBTag.push_back(filler);
362  } else {
363  varsFromJet.push_back(getter_utils::namedCustomJetGetter(input.name));
364  }
365  if (input.default_flag.size() > 0) {
366  deps.bTagInputs.insert(input.default_flag);
367  }
368  }
369 
370  return std::make_tuple(varsFromBTag, varsFromJet, deps);
371  }

◆ createDecorators()

std::tuple< std::map< std::string, internal::OutNodeFloat >, FTagDataDependencyNames, std::set< std::string > > FlavorTagDiscriminants::dataprep::createDecorators ( const lwt::GraphConfig &  config,
const FTagOptions options 
)

Definition at line 382 of file DataPrepUtilities.cxx.

385  {
387  std::map<std::string, internal::OutNodeFloat> decorators;
388  std::map<std::string, std::string> remap = options.remap_scalar;
389  std::set<std::string> used_remap;
390 
391  for (const auto& out_node: config.outputs) {
392  std::string node_name = out_node.first;
393 
395  for (const std::string& element: out_node.second.labels) {
396  std::string name = node_name + "_" + element;
397 
398  // let user rename the output
399  if (auto h = remap.extract(name)){
400  name = h.mapped();
401  used_remap.insert(h.key());
402  }
403  deps.bTagOutputs.insert(name);
404 
406  node.emplace_back(element, f);
407  }
408  decorators[node_name] = node;
409  }
410 
411  return std::make_tuple(decorators, deps, used_remap);
412  }

◆ createGetterConfig()

std::tuple< std::vector< FTagInputConfig >, std::vector< ConstituentsInputConfig >, FTagOptions > FlavorTagDiscriminants::dataprep::createGetterConfig ( lwt::GraphConfig &  graph_config,
FlipTagConfig  flip_config,
std::map< std::string, std::string >  remap_scalar,
TrackLinkType  track_link_type 
)

Definition at line 235 of file DataPrepUtilities.cxx.

239  {
240 
241  // we rewrite the inputs if we're using flip taggers
242  StringRegexes flip_converters = getNameFlippers(flip_config);
243 
244  if (flip_config != FlipTagConfig::STANDARD) {
245  rewriteFlipConfig(config, flip_converters);
246  }
247 
248  // build the jet inputs
249 
250  // type and default value-finding regexes are hardcoded for now
251  TypeRegexes type_regexes = {
252  {".*_isDefaults"_r, EDMType::CHAR},
253  // TODO: in the future we should migrate RNN and IPxD
254  // variables to floats. This is outside the scope of the
255  // current flavor tagging developments and AFT-438.
256  {"IP[23]D(Neg)?_[pbc](b|c|u|tau)"_r, EDMType::FLOAT},
257  {"SV1(Flip)?_[pbc](b|c|u|tau)"_r, EDMType::FLOAT},
258  {"(rnnip|iprnn|(?:dips|DIPS)[^_]*)(flip)?_p(b|c|u|tau)"_r, EDMType::FLOAT},
259  {"(JetFitter|SV1|JetFitterSecondaryVertex)(Flip)?_[Nn].*"_r, EDMType::INT},
260  {"(JetFitter|SV1|JetFitterSecondaryVertex).*"_r, EDMType::FLOAT},
261  {"(log_)?pt|abs_eta|eta|phi|energy|mass"_r, EDMType::CUSTOM_GETTER},
262  {"softMuon_p[bcu]"_r, EDMType::FLOAT},
263  {"softMuon_.*"_r, EDMType::FLOAT},
264  };
265 
266  StringRegexes default_flag_regexes{
267  {"IP2D_.*"_r, "IP2D_isDefaults"},
268  {"IP2DNeg_.*"_r, "IP2DNeg_isDefaults"},
269  {"IP3D_.*"_r, "IP3D_isDefaults"},
270  {"IP3DNeg_.*"_r, "IP3DNeg_isDefaults"},
271  {"SV1_.*"_r, "SV1_isDefaults"},
272  {"SV1Flip_.*"_r, "SV1Flip_isDefaults"},
273  {"JetFitter_.*"_r, "JetFitter_isDefaults"},
274  {"JetFitterFlip_.*"_r, "JetFitterFlip_isDefaults"},
275  {"JetFitterSecondaryVertex_.*"_r, "JetFitterSecondaryVertex_isDefaults"},
276  {"JetFitterSecondaryVertexFlip_.*"_r, "JetFitterSecondaryVertexFlip_isDefaults"},
277  {"rnnip_.*"_r, "rnnip_isDefaults"},
278  {"((?:dips|DIPS)[^_]*)_.*"_r, "$1_isDefaults"},
279  {"rnnipflip_.*"_r, "rnnipflip_isDefaults"},
280  {"iprnn_.*"_r, ""},
281  {"smt_.*"_r, "softMuon_isDefaults"},
282  {"softMuon_.*"_r, "softMuon_isDefaults"},
283  {"((log_)?pt|abs_eta|eta|phi|energy|mass)"_r, ""}}; // no default for custom cases
284 
285  std::vector<FTagInputConfig> input_config;
286  for (auto& node: config.inputs){
287  // allow the user to remape some of the inputs
288  remap_inputs(node.variables, remap_scalar, node.defaults);
289 
290  std::vector<std::string> input_names;
291  for (const auto& var: node.variables) {
292  input_names.push_back(var.name);
293  }
294 
295  // check to make sure the next line doesn't overwrite something
296  // TODO: figure out how to support multiple scalar input nodes
297  if (!input_config.empty()) {
298  throw std::logic_error(
299  "We don't currently support multiple scalar input nodes");
300  }
301  input_config = get_input_config(input_names, type_regexes, default_flag_regexes);
302  }
303 
304  // build the constituents inputs
305  std::vector<std::pair<std::string, std::vector<std::string>>> constituent_names;
306  for (auto& node: config.input_sequences) {
307  remap_inputs(node.variables, remap_scalar,
308  node.defaults);
309 
310  std::vector<std::string> names;
311  for (const auto& var: node.variables) {
312  names.push_back(var.name);
313  }
314  constituent_names.emplace_back(node.name, names);
315  }
316 
317  std::vector<ConstituentsInputConfig> constituent_configs;
318  for (auto el: constituent_names){
319  constituent_configs.push_back(
320  createConstituentsLoaderConfig(el.first, el.second, flip_config));
321  }
322 
323  // some additional options
325 
326  if (auto h = remap_scalar.extract(options.track_prefix)) {
327  options.track_prefix = h.mapped();
328  }
329  if (auto h = remap_scalar.extract(options.track_link_name)) {
330  options.track_link_name = h.mapped();
331  }
332  if (auto h = remap_scalar.extract(options.invalid_ip_key)) {
333  options.invalid_ip_key = h.mapped();
334  }
335  options.flip = flip_config;
336  options.remap_scalar = remap_scalar;
337  options.track_link_type = track_link_type;
338  return std::make_tuple(input_config, constituent_configs, options);
339  }

◆ createIpChecker()

std::tuple< std::function< char(const internal::Tracks &)>, std::vector< SG::AuxElement::Decorator< char > >, FTagDataDependencyNames, std::set< std::string > > FlavorTagDiscriminants::dataprep::createIpChecker ( const lwt::GraphConfig &  gc,
const FTagOptions opts 
)

Definition at line 420 of file DataPrepUtilities.cxx.

421  {
422  using namespace internal;
424  std::map<std::string, std::string> remap = opts.remap_scalar;
425  std::set<std::string> used_remap;
426  // dummy if there's no invalid check key
427  std::function checker = [](const Tracks&) -> char {return 0;};
428  // if we do have a key, return 1 for invalid
429  if (!opts.invalid_ip_key.empty()) {
430  std::string ip_key = opts.track_prefix + opts.invalid_ip_key;
431  SG::AuxElement::ConstAccessor<char> invalid_check(ip_key);
432  checker = [invalid_check](const Tracks& trs){
433  for (const xAOD::TrackParticle* trk: trs) {
434  if (invalid_check(*trk)) return 1;
435  }
436  return 0;
437  };
438  deps.trackInputs.insert(ip_key);
439  }
440  std::vector<SG::AuxElement::Decorator<char>> default_decs;
441  for (const auto& output: gc.outputs) {
442  std::string basename = output.first;
443  std::string dec_name = basename + "_isDefaults";
444  if (auto h = remap.extract(dec_name)) {
445  dec_name = h.mapped();
446  used_remap.insert(h.key());
447  }
448  default_decs.emplace_back(dec_name);
449  deps.bTagOutputs.insert(dec_name);
450  }
451  return {checker, default_decs, deps, used_remap};
452  }

◆ getNameFlippers()

StringRegexes FlavorTagDiscriminants::dataprep::getNameFlippers ( const FlipTagConfig flip_config)

Definition at line 197 of file DataPrepUtilities.cxx.

197  {
198 
199  std::string flip_name = "";
200  if (flip_config == FlipTagConfig::FLIP_SIGN) {
201  flip_name = "Flip";
202  }
203  else if (flip_config == FlipTagConfig::NEGATIVE_IP_ONLY) {
204  flip_name = "Neg";
205  }
206  else if (flip_config == FlipTagConfig::SIMPLE_FLIP) {
207  flip_name = "SimpleFlip";
208  }
209 
210  StringRegexes flip_converters {
211  {"(GN1[^_]*|GN2[^_]*)"_r, "$1" + flip_name},
212  {"(GN1[^_]*|GN2[^_]*)_(.*)"_r, "$1" + flip_name + "_$2"},
213  {"(IP[23]D)_(.*)"_r, "$1Neg_$2"},
214  {"(rnnip|(?:dips|DIPS)[^_]*)_(.*)"_r, "$1flip_$2"},
215  {"(JetFitter|SV1|JetFitterSecondaryVertex)_(.*)"_r, "$1Flip_$2"},
216  {"(rnnip|(?:dips|DIPS)[^_]*)"_r, "$1flip"},
217  {"^(DL1|DL1r[^_]*|DL1rmu|DL1d[^_]*)$"_r, "$1" + flip_name},
218  {"pt|abs_eta|eta"_r, "$&"},
219  {"softMuon.*|smt.*"_r, "$&"}
220  };
221 
222  return flip_converters;
223  }
used
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
FlavorTagDiscriminants::dataprep::StringRegexes
std::vector< std::pair< std::regex, std::string > > StringRegexes
Definition: DataPrepUtilities.h:148
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
postInclude.inputs
inputs
Definition: postInclude.SortInput.py:15
FlavorTagDiscriminants::FTagDataDependencyNames::bTagInputs
std::set< std::string > bTagInputs
Definition: FTagDataDependencyNames.h:14
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
FlavorTagDiscriminants::getter_utils::namedCustomJetGetter
std::function< std::pair< std::string, double >const xAOD::Jet &)> namedCustomJetGetter(const std::string &)
Definition: CustomGetterUtils.cxx:318
FlavorTagDiscriminants::createConstituentsLoaderConfig
ConstituentsInputConfig createConstituentsLoaderConfig(const std::string &name, const std::vector< std::string > &input_variables, FlipTagConfig flip_config)
Definition: ConstituentsLoader.cxx:84
FlavorTagDiscriminants::FTagDataDependencyNames
Definition: FTagDataDependencyNames.h:12
FlavorTagDiscriminants::FTagDataDependencyNames::bTagOutputs
std::set< std::string > bTagOutputs
Definition: FTagDataDependencyNames.h:15
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:58
h
python.subdetectors.mmg.names
names
Definition: mmg.py:8
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:379
PyPoolBrowser.node
node
Definition: PyPoolBrowser.py:131
python.CreateTierZeroArgdict.outputs
outputs
Definition: CreateTierZeroArgdict.py:189
merge.output
output
Definition: merge.py:17
node::name
void name(const std::string &n)
Definition: node.h:38
FlavorTagDiscriminants::internal::get::varFromBTag
VarFromBTag varFromBTag(const std::string &name, EDMType, const std::string &defaultflag)
Definition: DataPrepUtilities.cxx:155
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
item
Definition: ItemListSvc.h:43
FlavorTagDiscriminants::FTagOptions
Definition: DataPrepUtilities.h:45
python.PyAthena.v
v
Definition: PyAthena.py:157
unused
void unused(Args &&...)
Definition: VP1ExpertSettings.cxx:39
FlavorTagDiscriminants::FTagDataDependencyNames::trackInputs
std::set< std::string > trackInputs
Definition: FTagDataDependencyNames.h:13
remap
std::map< std::string, std::string > remap
list of directories to be explicitly remapped
Definition: hcg.cxx:92
FlavorTagDiscriminants::Tracks
std::vector< const xAOD::TrackParticle * > Tracks
Definition: TracksLoader.h:36
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
FlavorTagDiscriminants::internal::OutNodeFloat
std::vector< std::pair< std::string, OutputSetterFloat > > OutNodeFloat
Definition: DataPrepUtilities.h:141
athena.opts
opts
Definition: athena.py:86
FlavorTagDiscriminants::dataprep::getNameFlippers
StringRegexes getNameFlippers(const FlipTagConfig &flip_config)
Definition: DataPrepUtilities.cxx:197
node
Definition: memory_hooks-stdcmalloc.h:74
fitman.k
k
Definition: fitman.py:528
dumpTriggerInfo.checker
checker
Definition: dumpTriggerInfo.py:20
beamspotman.basename
basename
Definition: beamspotman.py:640