NanoAODSchema#

class coffea.nanoevents.NanoAODSchema(base_form, version='latest')[source]#

Bases: BaseSchema

NanoAOD schema builder

The NanoAOD schema is built from all branches found in the supplied file, based on the naming pattern of the branches. The following additional arrays are constructed:

  • Any branches named n{name} are assumed to be counts branches and converted to offsets o{name}

  • Any local index branches with names matching {source}_{target}Idx* are converted to global indexes for the event chunk (postfix G)

  • Any nested_items are constructed, if the necessary branches are available

  • Any special_items are constructed, if the necessary branches are available

From those arrays, NanoAOD collections are formed as collections of branches grouped by name, where:

  • one branch exists named name and no branches start with name_, interpreted as a single flat array;

  • one branch exists named name, one named n{name}, and no branches start with name_, interpreted as a single jagged array;

  • no branch exists named {name} and many branches start with name_*, interpreted as a flat table; or

  • one branch exists named n{name} and many branches start with name_*, interpreted as a jagged table.

Collections are assigned mixin types according to the mixins mapping. All collections are then zipped into one base.NanoEvents record and returned.

There is a class-level variable warn_missing_crossrefs which will alter the behavior of NanoAODSchema. If warn_missing_crossrefs is true then when a missing global index cross-ref target is encountered a warning will be issued. Regardless, the cross-reference is dropped.

The same holds for error_missing_events_id. If error_missing_events_id is true, then when the ‘run’, ‘event’, or ‘luminosityBlock’ fields are missing, an exception will be thrown; if it is false, just a warning will be issued.

Attributes Summary

alias_items

Arrays that should be aliased to ensure proper 4-vector behavior

all_cross_references

Cross-references, where an index is to be interpreted with respect to another collection

error_missing_event_ids

event_ids

List of NanoAOD event IDs

full_like_items

Arrays that should be filled with constant values if not present to satisfy 4-vector requirements

mixins

Default configuration for mixin types, based on the collection name.

nested_index_items

Nested collections, where nesting is accomplished by assuming the target can be unflattened according to a source counts

nested_items

Nested collections, where nesting is accomplished by a fixed-length set of indexers

rename_items

Arrays that should be renamed to ensure proper 4-vector behavior

special_items

Special arrays, where the callable and input arrays are specified in the value

warn_missing_crossrefs

Methods Summary

behavior()

Behaviors necessary to implement this schema (dict)

v5(base_form)

Build the NanoEvents assuming NanoAODv5

v6(base_form)

Build the NanoEvents assuming NanoAODv6

v7(base_form)

Build the NanoEvents assuming NanoAODv7

Attributes Documentation

alias_items = {'CorrT1METJet_mass': 'CorrT1METJet_rawMass', 'CorrT1METJet_pt': 'CorrT1METJet_rawPt'}#

Arrays that should be aliased to ensure proper 4-vector behavior

all_cross_references = {'Electron_genPartIdx': 'GenPart', 'Electron_jetIdx': 'Jet', 'Electron_photonIdx': 'Photon', 'FatJet_genJetAK8Idx': 'GenJetAK8', 'FatJet_subJetIdx1': 'SubJet', 'FatJet_subJetIdx2': 'SubJet', 'FsrPhoton_muonIdx': 'Muon', 'GenPart_genPartIdxMother': 'GenPart', 'GenVisTau_genPartIdxMother': 'GenPart', 'Jet_electronIdx1': 'Electron', 'Jet_electronIdx2': 'Electron', 'Jet_genJetIdx': 'GenJet', 'Jet_muonIdx1': 'Muon', 'Jet_muonIdx2': 'Muon', 'LowPtElectron_electronIdx': 'Electron', 'LowPtElectron_genPartIdx': 'GenPart', 'LowPtElectron_photonIdx': 'Photon', 'Muon_fsrPhotonIdx': 'FsrPhoton', 'Muon_genPartIdx': 'GenPart', 'Muon_jetIdx': 'Jet', 'Photon_electronIdx': 'Electron', 'Photon_genPartIdx': 'GenPart', 'Photon_jetIdx': 'Jet', 'Tau_genPartIdx': 'GenPart', 'Tau_jetIdx': 'Jet'}#

Cross-references, where an index is to be interpreted with respect to another collection

Each such cross-reference will be converted to a global indexer, so that arbitrarily sliced events can still resolve the indirection back the parent events

error_missing_event_ids = True#
event_ids = ['run', 'luminosityBlock', 'event']#

List of NanoAOD event IDs

full_like_items = {'CorrT1METJet_mass': (<function full_like_from_offsets_form>, ('oCorrT1METJet', 0.0)), 'FatJet_charge': (<function full_like_from_offsets_form>, ('oFatJet', 0.0)), 'FsrPhoton_charge': (<function full_like_from_offsets_form>, ('oFsrPhoton', 0.0)), 'FsrPhoton_mass': (<function full_like_from_offsets_form>, ('oFsrPhoton', 0.0)), 'IsoTrack_mass': (<function full_like_from_offsets_form>, ('oIsoTrack', 0.0)), 'Jet_charge': (<function full_like_from_offsets_form>, ('oJet', 0.0)), 'Photon_charge': (<function full_like_from_offsets_form>, ('oPhoton', 0.0)), 'Photon_mass': (<function full_like_from_offsets_form>, ('oPhoton', 0.0)), 'SoftActivityJet_mass': (<function full_like_from_offsets_form>, ('oSoftActivityJet', 0.0)), 'TrigObj_mass': (<function full_like_from_offsets_form>, ('oTrigObj', 0.0))}#

Arrays that should be filled with constant values if not present to satisfy 4-vector requirements

mixins = {'CaloMET': 'MissingET', 'ChsMET': 'MissingET', 'CorrT1METJet': 'PtEtaPhiMCollection', 'Electron': 'Electron', 'FatJet': 'FatJet', 'FsrPhoton': 'FsrPhoton', 'GenDressedLepton': 'PtEtaPhiMCollection', 'GenIsolatedPhoton': 'PtEtaPhiMCollection', 'GenJet': 'PtEtaPhiMCollection', 'GenJetAK8': 'PtEtaPhiMCollection', 'GenMET': 'MissingET', 'GenPart': 'GenParticle', 'GenVisTau': 'GenVisTau', 'IsoTrack': 'PtEtaPhiMCollection', 'Jet': 'Jet', 'LHEPart': 'PtEtaPhiMCollection', 'LowPtElectron': 'LowPtElectron', 'MET': 'MissingET', 'METFixEE2017': 'MissingET', 'Muon': 'Muon', 'PV': 'Vertex', 'Photon': 'Photon', 'PuppiMET': 'MissingET', 'RawMET': 'MissingET', 'RawPuppiMET': 'MissingET', 'SV': 'SecondaryVertex', 'SoftActivityJet': 'PtEtaPhiMCollection', 'SubGenJetAK8': 'PtEtaPhiMCollection', 'SubJet': 'PtEtaPhiMCollection', 'Tau': 'Tau', 'TkMET': 'MissingET', 'TrigObj': 'PtEtaPhiMCollection'}#

Default configuration for mixin types, based on the collection name.

The types are implemented in the coffea.nanoevents.methods.nanoaod module.

nested_index_items = {'FatJet_pFCandsIdxG': ('FatJet_nConstituents', 'FatJetPFCands'), 'GenFatJet_pFCandsIdxG': ('GenJetAK8_nConstituents', 'GenFatJetCands'), 'GenJet_pFCandsIdxG': ('GenJet_nConstituents', 'GenJetCands'), 'Jet_pFCandsIdxG': ('Jet_nConstituents', 'JetPFCands')}#

Nested collections, where nesting is accomplished by assuming the target can be unflattened according to a source counts

nested_items = {'FatJet_subJetIdxG': ['FatJet_subJetIdx1G', 'FatJet_subJetIdx2G'], 'Jet_electronIdxG': ['Jet_electronIdx1G', 'Jet_electronIdx2G'], 'Jet_muonIdxG': ['Jet_muonIdx1G', 'Jet_muonIdx2G']}#

Nested collections, where nesting is accomplished by a fixed-length set of indexers

rename_items = {'Electron_regrEnergy': 'Electron_energy', 'Photon_regrEnergy': 'Photon_energy'}#

Arrays that should be renamed to ensure proper 4-vector behavior

special_items = {'GenPart_childrenIdxG': (<function children_form>, ('oGenPart', 'GenPart_genPartIdxMotherG')), 'GenPart_distinctChildrenDeepIdxG': (<function distinctChildrenDeep_form>, ('oGenPart', 'GenPart_genPartIdxMotherG', 'GenPart_pdgId')), 'GenPart_distinctChildrenIdxG': (<function children_form>, ('oGenPart', 'GenPart_distinctParentIdxG')), 'GenPart_distinctParentIdxG': (<function distinctParent_form>, ('GenPart_genPartIdxMotherG', 'GenPart_pdgId'))}#

Special arrays, where the callable and input arrays are specified in the value

warn_missing_crossrefs = True#

Methods Documentation

classmethod behavior()[source]#

Behaviors necessary to implement this schema (dict)

classmethod v5(base_form)[source]#

Build the NanoEvents assuming NanoAODv5

Returns:

Schema configured for NanoAODv5.

Return type:

NanoAODSchema

classmethod v6(base_form)[source]#

Build the NanoEvents assuming NanoAODv6

Returns:

Schema configured for NanoAODv6.

Return type:

NanoAODSchema

classmethod v7(base_form)[source]#

Build the NanoEvents assuming NanoAODv7

For example, one can use NanoEventsFactory.from_root("file.root", schemaclass=NanoAODSchema.v7) to ensure NanoAODv7 compatibility.

Returns:

Schema configured for NanoAODv7.

Return type:

NanoAODSchema