def test_jagged_ufunc_table(self): a = JaggedArray([0, 3, 3, 5], [3, 3, 5, 10], [0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]) assert (awkward.Table(x=[100, 200, 300, 400], y=[1000, 2000, 3000, 4000]) + a).tolist() == [{"x": [100.0, 101.1, 102.2], "y": [1000.0, 1001.1, 1002.2]}, {"x": [], "y": []}, {"x": [303.3, 304.4], "y": [3003.3, 3004.4]}, {"x": [405.5, 406.6, 407.7, 408.8, 409.9], "y": [4005.5, 4006.6, 4007.7, 4008.8, 4009.9]}] a = JaggedArray([0, 3, 3, 5], [3, 3, 5, 10], awkward.Table(x=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], y=[0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9])) assert (a + 1000).tolist() == [[{"x": 1000, "y": 1000.0}, {"x": 1001, "y": 1001.1}, {"x": 1002, "y": 1002.2}], [], [{"x": 1003, "y": 1003.3}, {"x": 1004, "y": 1004.4}], [{"x": 1005, "y": 1005.5}, {"x": 1006, "y": 1006.6}, {"x": 1007, "y": 1007.7}, {"x": 1008, "y": 1008.8}, {"x": 1009, "y": 1009.9}]] assert (a + numpy.array([100, 200, 300, 400])).tolist() == [[{"x": 100, "y": 100.0}, {"x": 101, "y": 101.1}, {"x": 102, "y": 102.2}], [], [{"x": 303, "y": 303.3}, {"x": 304, "y": 304.4}], [{"x": 405, "y": 405.5}, {"x": 406, "y": 406.6}, {"x": 407, "y": 407.7}, {"x": 408, "y": 408.8}, {"x": 409, "y": 409.9}]] assert (a + awkward.Table(x=[100, 200, 300, 400], y=[1000, 2000, 3000, 4000])).tolist() == [[{"x": 100, "y": 1000.0}, {"x": 101, "y": 1001.1}, {"x": 102, "y": 1002.2}], [], [{"x": 303, "y": 3003.3}, {"x": 304, "y": 3004.4}], [{"x": 405, "y": 4005.5}, {"x": 406, "y": 4006.6}, {"x": 407, "y": 4007.7}, {"x": 408, "y": 4008.8}, {"x": 409, "y": 4009.9}]]
def run_query(input_filenames=None, tree_name=None, branches=None): import awkward, uproot a = (lambda event: (awkward.Table if hasattr(awkward, 'Table') else awkward['Table'])((event.MVA3lCERN_weight_ttH if hasattr(event, 'MVA3lCERN_weight_ttH') else event['MVA3lCERN_weight_ttH']))) b = (lambda event: event[(((((((((((((((((((((((((((event.trilep_type if hasattr(event, 'trilep_type') else event['trilep_type']) > 0) & ((event.nTaus_OR_Pt25 if hasattr(event, 'nTaus_OR_Pt25') else event['nTaus_OR_Pt25']) == 0)) & (abs((event.total_charge if hasattr(event, 'total_charge') else event['total_charge'])) == 1)) & ((event.nJets_OR_T if hasattr(event, 'nJets_OR_T') else event['nJets_OR_T']) >= 2)) & ((event.nJets_OR_T_MV2c10_70 if hasattr(event, 'nJets_OR_T_MV2c10_70') else event['nJets_OR_T_MV2c10_70']) > 0)) & ((event.lep_Pt_1 if hasattr(event, 'lep_Pt_1') else event['lep_Pt_1']) > 15000.0)) & ((event.lep_Pt_2 if hasattr(event, 'lep_Pt_2') else event['lep_Pt_2']) > 15000.0)) & ((event.lep_isolationFixedCutLoose_0 if hasattr(event, 'lep_isolationFixedCutLoose_0') else event['lep_isolationFixedCutLoose_0']) > 0)) & (abs(((event.Mlll012 if hasattr(event, 'Mlll012') else event['Mlll012']) - 91200.0)) > 10000.0)) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1']))) | ((event.Mll01 if hasattr(event, 'Mll01') else event['Mll01']) > 12000.0))) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2']))) | ((event.Mll02 if hasattr(event, 'Mll02') else event['Mll02']) > 12000.0))) & (((((abs((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0'])) == 13) & ((event.lep_isMedium_0 if hasattr(event, 'lep_isMedium_0') else event['lep_isMedium_0']) > 0)) | (abs((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0'])) == 11)) & (((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 11) & (abs((event.lep_Eta_1 if hasattr(event, 'lep_Eta_1') else event['lep_Eta_1'])) < 2.0)) | ((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 13) & ((event.lep_isMedium_1 if hasattr(event, 'lep_isMedium_1') else event['lep_isMedium_1']) > 0)))) & (((abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2'])) == 11) & (abs((event.lep_Eta_2 if hasattr(event, 'lep_Eta_2') else event['lep_Eta_2'])) < 2.0)) | ((abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2'])) == 13) & ((event.lep_isMedium_2 if hasattr(event, 'lep_isMedium_2') else event['lep_isMedium_2']) > 0))))) & ((((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) * abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2']))) != 169) & ((event.DRll12 if hasattr(event, 'DRll12') else event['DRll12']) > 0.5)) | ((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) * abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2']))) == 169))) & ((event.Mll12 if hasattr(event, 'Mll12') else event['Mll12']) > 12000.0)) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1']))) | (abs(((event.Mll01 if hasattr(event, 'Mll01') else event['Mll01']) - 91200.0)) > 10000.0))) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2']))) | (abs(((event.Mll02 if hasattr(event, 'Mll02') else event['Mll02']) - 91200.0)) > 10000.0))) & ((event.MVA3lCERN_weight_ttH if hasattr(event, 'MVA3lCERN_weight_ttH') else event['MVA3lCERN_weight_ttH']) > (-1))) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1']))) | (abs(((event.Mll01 if hasattr(event, 'Mll01') else event['Mll01']) - 91200.0)) > 10000.0))) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2']))) | (abs(((event.Mll02 if hasattr(event, 'Mll02') else event['Mll02']) - 91200.0)) > 10000.0))) & ((event.MVA3lCERN_weight_ttH if hasattr(event, 'MVA3lCERN_weight_ttH') else event['MVA3lCERN_weight_ttH']) > 0.3)) & ((event.MVA3lCERN_weight_ttW if hasattr(event, 'MVA3lCERN_weight_ttW') else event['MVA3lCERN_weight_ttW']) < 0.75)) & ((event.MVA3lCERN_weight_ttZ if hasattr(event, 'MVA3lCERN_weight_ttZ') else event['MVA3lCERN_weight_ttZ']) < 0.75)) & ((event.MVA3lCERN_weight_VV if hasattr(event, 'MVA3lCERN_weight_VV') else event['MVA3lCERN_weight_VV']) < 0.75)) & ((event.MVA3lCERN_weight_ttbar if hasattr(event, 'MVA3lCERN_weight_ttbar') else event['MVA3lCERN_weight_ttbar']) < 0.3)) & ((((((((event.dilep_type if hasattr(event, 'dilep_type') else event['dilep_type']) > 0) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) * (event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) > 0)) & ((event.lep_isQMisID_1 if hasattr(event, 'lep_isQMisID_1') else event['lep_isQMisID_1']) == 0)) & ((event.lep_isQMisID_0 if hasattr(event, 'lep_isQMisID_0') else event['lep_isQMisID_0']) == 0)) | ((((event.trilep_type if hasattr(event, 'trilep_type') else event['trilep_type']) > 0) & ((event.lep_isQMisID_2 if hasattr(event, 'lep_isQMisID_2') else event['lep_isQMisID_2']) == 0)) & ((event.lep_isQMisID_1 if hasattr(event, 'lep_isQMisID_1') else event['lep_isQMisID_1']) == 0))) | (((event.quadlep_type if hasattr(event, 'quadlep_type') else event['quadlep_type']) > 0) & ((event.FSF_4L_tot if hasattr(event, 'FSF_4L_tot') else event['FSF_4L_tot']) == 1))) & (((((((((event.dilep_type if hasattr(event, 'dilep_type') else event['dilep_type']) > 0) & (((((abs((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0'])) == 13) & ((event.lep_isMedium_0 if hasattr(event, 'lep_isMedium_0') else event['lep_isMedium_0']) > 0)) & ((event.lep_isolationFixedCutLoose_0 if hasattr(event, 'lep_isolationFixedCutLoose_0') else event['lep_isolationFixedCutLoose_0']) > 0)) & ((event.lep_promptLeptonVeto_TagWeight_0 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_0') else event['lep_promptLeptonVeto_TagWeight_0']) < (-0.5))) | ((((((abs((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0'])) == 11) & ((event.lep_isolationFixedCutLoose_0 if hasattr(event, 'lep_isolationFixedCutLoose_0') else event['lep_isolationFixedCutLoose_0']) > 0)) & ((event.lep_isTightLH_0 if hasattr(event, 'lep_isTightLH_0') else event['lep_isTightLH_0']) > 0)) & ((event.lep_chargeIDBDTTight_0 if hasattr(event, 'lep_chargeIDBDTTight_0') else event['lep_chargeIDBDTTight_0']) > 0.7)) & ((event.lep_ambiguityType_0 if hasattr(event, 'lep_ambiguityType_0') else event['lep_ambiguityType_0']) == 0)) & ((event.lep_promptLeptonVeto_TagWeight_0 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_0') else event['lep_promptLeptonVeto_TagWeight_0']) < (-0.7))))) & (((((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 13) & ((event.lep_isMedium_1 if hasattr(event, 'lep_isMedium_1') else event['lep_isMedium_1']) > 0)) & ((event.lep_isolationFixedCutLoose_1 if hasattr(event, 'lep_isolationFixedCutLoose_1') else event['lep_isolationFixedCutLoose_1']) > 0)) & ((event.lep_promptLeptonVeto_TagWeight_1 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_1') else event['lep_promptLeptonVeto_TagWeight_1']) < (-0.5))) | ((((((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 11) & ((event.lep_isolationFixedCutLoose_1 if hasattr(event, 'lep_isolationFixedCutLoose_1') else event['lep_isolationFixedCutLoose_1']) > 0)) & ((event.lep_isTightLH_1 if hasattr(event, 'lep_isTightLH_1') else event['lep_isTightLH_1']) > 0)) & ((event.lep_chargeIDBDTTight_1 if hasattr(event, 'lep_chargeIDBDTTight_1') else event['lep_chargeIDBDTTight_1']) > 0.7)) & ((event.lep_ambiguityType_1 if hasattr(event, 'lep_ambiguityType_1') else event['lep_ambiguityType_1']) == 0)) & ((event.lep_promptLeptonVeto_TagWeight_1 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_1') else event['lep_promptLeptonVeto_TagWeight_1']) < (-0.7))))) | ((((event.trilep_type if hasattr(event, 'trilep_type') else event['trilep_type']) > 0) & ((event.nTaus_OR_Pt25 if hasattr(event, 'nTaus_OR_Pt25') else event['nTaus_OR_Pt25']) == 0)) & (((((abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2'])) == 13) & ((event.lep_isolationFixedCutLoose_2 if hasattr(event, 'lep_isolationFixedCutLoose_2') else event['lep_isolationFixedCutLoose_2']) > 0)) & ((event.lep_promptLeptonVeto_TagWeight_2 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_2') else event['lep_promptLeptonVeto_TagWeight_2']) < (-0.5))) | ((((((abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2'])) == 11) & ((event.lep_isolationFixedCutLoose_2 if hasattr(event, 'lep_isolationFixedCutLoose_2') else event['lep_isolationFixedCutLoose_2']) > 0)) & ((event.lep_isTightLH_2 if hasattr(event, 'lep_isTightLH_2') else event['lep_isTightLH_2']) > 0)) & ((event.lep_chargeIDBDTTight_2 if hasattr(event, 'lep_chargeIDBDTTight_2') else event['lep_chargeIDBDTTight_2']) > 0.7)) & ((event.lep_promptLeptonVeto_TagWeight_2 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_2') else event['lep_promptLeptonVeto_TagWeight_2']) < (-0.7))) & ((event.lep_ambiguityType_2 if hasattr(event, 'lep_ambiguityType_2') else event['lep_ambiguityType_2']) == 0))) & ((((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 13) & ((event.lep_isolationFixedCutLoose_1 if hasattr(event, 'lep_isolationFixedCutLoose_1') else event['lep_isolationFixedCutLoose_1']) > 0)) & ((event.lep_promptLeptonVeto_TagWeight_1 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_1') else event['lep_promptLeptonVeto_TagWeight_1']) < (-0.5))) | ((((((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 11) & ((event.lep_isolationFixedCutLoose_1 if hasattr(event, 'lep_isolationFixedCutLoose_1') else event['lep_isolationFixedCutLoose_1']) > 0)) & ((event.lep_isTightLH_1 if hasattr(event, 'lep_isTightLH_1') else event['lep_isTightLH_1']) > 0)) & ((event.lep_chargeIDBDTTight_1 if hasattr(event, 'lep_chargeIDBDTTight_1') else event['lep_chargeIDBDTTight_1']) > 0.7)) & ((event.lep_promptLeptonVeto_TagWeight_1 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_1') else event['lep_promptLeptonVeto_TagWeight_1']) < (-0.7))) & ((event.lep_ambiguityType_1 if hasattr(event, 'lep_ambiguityType_1') else event['lep_ambiguityType_1']) == 0)))))) | (((event.dilep_type if hasattr(event, 'dilep_type') else event['dilep_type']) > 0) & ((event.nTaus_OR_Pt25 if hasattr(event, 'nTaus_OR_Pt25') else event['nTaus_OR_Pt25']) > 1))) | ((((event.dilep_type if hasattr(event, 'dilep_type') else event['dilep_type']) > 0) | ((event.trilep_type if hasattr(event, 'trilep_type') else event['trilep_type']) > 0)) == 0)) | ((event.quadlep_type if hasattr(event, 'quadlep_type') else event['quadlep_type']) > 0)) | (((event.trilep_type if hasattr(event, 'trilep_type') else event['trilep_type']) > 0) & ((event.nTaus_OR_Pt25 if hasattr(event, 'nTaus_OR_Pt25') else event['nTaus_OR_Pt25']) > 0))))) | ((event.is1L2Tau if hasattr(event, 'is1L2Tau') else event['is1L2Tau']) > 0))]) out = awkward.Table() out['0'] =[] for i in uproot.iterate(input_filenames,tree_name,branches=branches,namedecode="utf-8",entrysteps=50000, reportentries=False): out = awkward.concatenate([out, (a)((b)(awkward.Table(i)))]) # for i in uproot.iterate(input_filenames,tree_name,branches=branches,namedecode="utf-8",entrysteps=10000, reportentries=True): # print("Entry range: ", i[0], i[1]) # out = awkward.concatenate([out, (a)((b)(awkward.Table(i[2])))]) return out
def __getitem__(self, key): if key in self.cache_: return self.table_[key] elif key in self.keys_: ret = self.array(key) self.table_[key] = ret self.cache_.add(key) return self.table_[key] else: branch = key + '_' subset = [k for k in self.keys_ if k.startswith(branch)] info = {i.replace(branch, ''): self.array(i) for i in subset} counter = 'n' + key counts = 0 if counter in self.keys_: counts = self.array(counter) for name, branch in info.items(): if not (branch.counts == counts).all(): raise ValueError( f'Key {name} does not have the right shape') info = {i: j.content for i, j in info.items()} #check that everything is there to make a p4 if all(i in info for i in ['pt', 'eta', 'phi', 'mass' ]): # FIXME! wrong logic ret = JaggedCandidateArray.candidatesfromcounts(counts, **info) else: ret = awk.Table(**info) if all(i in info for i in ['pt', 'phi']): ret['p4'] = uproot_methods.TLorentzVectorArray.from_ptetaphi( ret['pt'], 0, ret['phi'], 0) self.table_[key] = ret self.cache_.add(key) return self.table_[key]
def table(self): out = awkward.Table() out._view = self._view out._base = self._base out._rowname = self._rowname out._contents = self._contents return out
def arrow_table(self, chunk_size, event_limit=sys.maxint): def group(iterator, n): """ Batch together chunks of events into a single yield :param iterator: Iterator from which events are drown :param n: Number of events to include in each yield :return: Yields a list of n or fewer events """ done = False while not done: results = [] try: for i in range(n): results.append(iterator.next()) yield results except StopIteration: done = True yield results for events in group(self.event_iterator.iterate(event_limit), chunk_size): object_array = awkward.fromiter(events) attr_dict = {} for attr_name in self.event_iterator.attr_name_list: branch_name = attr_name.split('.')[0].strip(' ') a_name = attr_name.split('.')[1] attr_dict[branch_name + '_' + a_name.strip('()')] = \ object_array[branch_name][a_name] object_table = awkward.Table(**attr_dict) yield awkward.toarrow(object_table)
def from_p3(cls, p3, t): out = cls.__new__(cls) out._initObjectArray(awkward.Table()) out["fX"] = p3.x out["fY"] = p3.y out["fZ"] = p3.z out["fE"] = t return out
def jaggedFromColumnGroup(cgroup): if isinstance(cgroup,PhysicalColumnGroup): return JaggedCandidateArray.candidatesfromcounts(counts = cgroup.counts(), p4 = cgroup.p4Column(), **cgroup.otherColumns()) else: return awkward.JaggedArray.fromcounts(cgroup.counts(), awkward.Table(cgroup.columns()))
def candidatesfromoffsets(cls,offsets,p4,**kwargs): items = {} if isinstance(p4,uproot_methods.TLorentzVectorArray): items['p4'] = p4 else: items['p4'] = uproot_methods.TLorentzVectorArray(p4[:,0],p4[:,1], p4[:,2],p4[:,3]) thep4 = items['p4'] items['__fast_pt'] = fast_pt(thep4) items['__fast_eta'] = fast_eta(thep4) items['__fast_phi'] = fast_phi(thep4) items['__fast_mass'] = fast_mass(thep4) items.update(kwargs) return cls.fromoffsets(offsets,awkward.Table(items))
def __getitem__(self, key): if key in self.cache_: return self.table_[key] elif key in self.keys_: ret = self.array(key) self.table_[key] = ret self.cache_.add(key) return self.table_[key] else: branch = key + '_' subset = [k for k in self.keys_ if k.startswith(branch)] info = {i.replace(branch, ''): self.array(i) for i in subset} counter = 'n' + key counts = None if counter in self.keys_: counts = self.array(counter) elif all(isinstance(i, awk.JaggedArray) for i in info.values()): # In case counter is missing by mistake print( f'You probably forgot to ask to load {counter} as a branch. Inferring it...' ) counts = info[list(info.keys())[0]].counts if counts is not None: for name, branch in info.items(): if not (branch.counts == counts).all(): raise ValueError( f'Key {name} does not have the right shape') #check that everything is there to make a p4 if counts is not None and all( i in info for i in ['pt', 'eta', 'phi', 'mass']): # flatted to use candidatesfromcounts, better option available? info = {i: j.content for i, j in info.items()} ret = JaggedCandidateArray.candidatesfromcounts(counts, **info) elif counts is not None: # Not enough to make a JaggedCandidateArray, but a jagged table ret = awk.JaggedArray.zip(**info) else: # flat object ret = awk.Table(**info) # check if p4 can be made, with MET fix for missing eta and mass if all(i in info for i in ['pt', 'phi']): ret['p4'] = uproot_methods.TLorentzVectorArray.from_ptetaphi( info['pt'], info.get('eta', 0), info['phi'], info.get('mass', 0)) self.table_[key] = ret self.cache_.add(key) return self.table_[key]
def expand_chunk(chunk): chunk = dict(chunk.iloc[0]) dataset = chunk.pop('_id_dataset') chunkindex = chunk.pop('_id_chunkindex') columnnames = set(k[8:-5] for k in chunk.keys() if k.startswith('columns_') and k.endswith('_data')) columns = {} for name in columnnames: columns[name] = unpack({ 'size': chunk['columns_%s_size' % name], 'dtype': chunk['columns_%s_dtype' % name], 'data': chunk['columns_%s_data' % name], }) table = awkward.Table(columns) table = awkward.toarrow(table).to_pandas() table['dataset'] = dataset return table
def __init__(self, *infiles, branches=[]): if all(isinstance(i, dict) for i in infiles): self.tts = infiles self.keys_ = set(self.tts[0].keys()) self.dict_like_ = True elif all(not isinstance(i, dict) for i in infiles): self.ufs = map(uproot.open, infiles) self.tts = [i['Events'] for i in self.ufs] self.keys_ = set([i.decode() for i in self.tts[0].keys()]) self.dict_like_ = False else: raise RuntimeError('Cannot mix files and dicts!') if branches: self.keys_ = set(i for i in self.keys_ if any( fnmatch(i, branch) for branch in branches)) self.cache_ = set() self.used_branches_ = set() self.table_ = awk.Table()
def recurse(layout): if isinstance(layout, awkward1.partition.PartitionedArray): return awkward0.ChunkedArray( [recurse(x) for x in layout.partitions]) elif isinstance(layout, awkward1.layout.NumpyArray): return numpy.asarray(layout) elif isinstance(layout, awkward1.layout.EmptyArray): return numpy.array([]) elif isinstance(layout, awkward1.layout.RegularArray): # content, size if keeplayout: raise ValueError( "awkward0 has no equivalent of RegularArray; " "try keeplayout=False") offsets = numpy.arange(0, (len(layout) + 1)*layout.size, layout.size) return awkward0.JaggedArray.fromoffsets( offsets, recurse(layout.content)) elif isinstance(layout, awkward1.layout.ListArray32): # starts, stops, content return awkward0.JaggedArray( numpy.asarray(layout.starts), numpy.asarray(layout.stops), recurse(layout.content)) elif isinstance(layout, awkward1.layout.ListArrayU32): # starts, stops, content return awkward0.JaggedArray( numpy.asarray(layout.starts), numpy.asarray(layout.stops), recurse(layout.content)) elif isinstance(layout, awkward1.layout.ListArray64): # starts, stops, content return awkward0.JaggedArray( numpy.asarray(layout.starts), numpy.asarray(layout.stops), recurse(layout.content)) elif isinstance(layout, awkward1.layout.ListOffsetArray32): # offsets, content return awkward0.JaggedArray.fromoffsets( numpy.asarray(layout.offsets), recurse(layout.content)) elif isinstance(layout, awkward1.layout.ListOffsetArrayU32): # offsets, content return awkward0.JaggedArray.fromoffsets( numpy.asarray(layout.offsets), recurse(layout.content)) elif isinstance(layout, awkward1.layout.ListOffsetArray64): # offsets, content return awkward0.JaggedArray.fromoffsets( numpy.asarray(layout.offsets), recurse(layout.content)) elif isinstance(layout, awkward1.layout.Record): # istuple, numfields, field(i) out = [] for i in range(layout.numfields): content = layout.field(i) if isinstance(content, (awkward1.layout.Content, awkward1.layout.Record)): out.append(recurse(content)) else: out.append(content) if layout.istuple: return tuple(out) else: return dict(zip(layout.keys(), out)) elif isinstance(layout, awkward1.layout.RecordArray): # istuple, numfields, field(i) if layout.numfields == 0 and len(layout) != 0: raise ValueError( "cannot convert zero-field, nonzero-length RecordArray " "to awkward0.Table (limitation in awkward0)") keys = layout.keys() values = [recurse(x) for x in layout.contents] pairs = collections.OrderedDict(zip(keys, values)) out = awkward0.Table(pairs) if layout.istuple: out._rowname = "tuple" return out elif isinstance(layout, awkward1.layout.UnionArray8_32): # tags, index, numcontents, content(i) return awkward0.UnionArray(numpy.asarray(layout.tags), numpy.asarray(layout.index), [recurse(x) for x in layout.contents]) elif isinstance(layout, awkward1.layout.UnionArray8_U32): # tags, index, numcontents, content(i) return awkward0.UnionArray(numpy.asarray(layout.tags), numpy.asarray(layout.index), [recurse(x) for x in layout.contents]) elif isinstance(layout, awkward1.layout.UnionArray8_64): # tags, index, numcontents, content(i) return awkward0.UnionArray(numpy.asarray(layout.tags), numpy.asarray(layout.index), [recurse(x) for x in layout.contents]) elif isinstance(layout, awkward1.layout.IndexedOptionArray32): # index, content index = numpy.asarray(layout.index) toosmall = (index < -1) if toosmall.any(): index = index.copy() index[toosmall] = -1 return awkward0.IndexedMaskedArray(index, recurse(layout.content)) elif isinstance(layout, awkward1.layout.IndexedOptionArray64): # index, content index = numpy.asarray(layout.index) toosmall = (index < -1) if toosmall.any(): index = index.copy() index[toosmall] = -1 return awkward0.IndexedMaskedArray(index, recurse(layout.content)) elif isinstance(layout, awkward1.layout.IndexedArray32): # index, content return awkward0.IndexedArray(numpy.asarray(layout.index), recurse(layout.content)) elif isinstance(layout, awkward1.layout.IndexedArrayU32): # index, content return awkward0.IndexedArray(numpy.asarray(layout.index), recurse(layout.content)) elif isinstance(layout, awkward1.layout.IndexedArray64): # index, content return awkward0.IndexedArray(numpy.asarray(layout.index), recurse(layout.content)) elif isinstance(layout, awkward1.layout.ByteMaskedArray): # mask, content, valid_when return awkward0.MaskedArray(numpy.asarray(layout.mask), recurse(layout.content), maskedwhen=(not layout.valid_when)) elif isinstance(layout, awkward1.layout.BitMaskedArray): # mask, content, valid_when, length, lsb_order return awkward0.BitMaskedArray(numpy.asarray(layout.mask), recurse(layout.content), maskedwhen=(not layout.valid_when), lsborder=layout.lsb_order) elif isinstance(layout, awkward1.layout.UnmaskedArray): # content return recurse(layout.content) # no equivalent in awkward0 else: raise AssertionError( "missing converter for {0}".format(type(layout).__name__))
def Initialize(items): argkeys = items.keys() p4 = None if 'p4' in argkeys: p4 = items['p4'] if not isinstance(p4, uproot_methods.TLorentzVectorArray): p4 = SaiyanArray.from_cartesian(p4[:, 0], p4[:, 1], p4[:, 2], p4[:, 3]) elif 'pt' in argkeys and 'eta' in argkeys and 'phi' in argkeys and 'mass' in argkeys: temp = SaiyanArray.from_ptetaphim(items['pt'], items['eta'], items['phi'], items['mass'])._to_cartesian() p4 = SaiyanArray.from_cartesian(temp.x, temp.y, temp.z, temp.t) del items['pt'] del items['eta'] del items['phi'] del items['mass'] elif 'pt' in argkeys and 'eta' in argkeys and 'phi' in argkeys and 'energy' in argkeys: p4 = SaiyanArray.from_ptetaphi(items['pt'], items['eta'], items['phi'], items['energy']) del items['pt'] del items['eta'] del items['phi'] del items['energy'] elif 'px' in argkeys and 'py' in argkeys and 'pz' in argkeys and 'mass' in argkeys: p4 = SaiyanArray.from_xyzm(items['px'], items['py'], items['pz'], items['mass']) del items['px'] del items['py'] del items['pz'] del items['mass'] elif 'pt' in argkeys and 'phi' in argkeys and 'pz' in argkeys and 'energy' in argkeys: p4 = SaiyanArray.from_cylindrical(items['pt'], items['phi'], items['pz'], items['energy']) del items['pt'] del items['phi'] del items['pz'] del items['energy'] elif 'px' in argkeys and 'py' in argkeys and 'pz' in argkeys and 'energy' in argkeys: p4 = SaiyanArray.from_cartesian(items['px'], items['py'], items['pz'], items['energy']) del items['px'] del items['py'] del items['pz'] del items['energy'] elif 'p' in argkeys and 'theta' in argkeys and 'phi' in argkeys and 'energy' in argkeys: p4 = SaiyanArray.from_spherical(items['p'], items['theta'], items['phi'], items['energy']) del items['p'] del items['theta'] del items['phi'] del items['energy'] elif 'p3' in argkeys and 'energy' in argkeys: p4 = SaiyanArray.from_p3(items['p3'], items['energy']) del items['p3'] del items['energy'] try: p4 except NameError: out = awkward.Table() else: out = p4 for name, value in items.items(): out[name] = value if isinstance(out, awkward.JaggedArray): out = JaggedSaiyanArrayMethods.fromjagged(out) else: # p4 is not None and not isinstance(out, awkward.JaggedArray): try: p4 except NameError: out.__class__ = type("Event", (out.__class__, Dangerousness), {}) else: out.__class__ = type("Object", (out.__class__, SaiyanCommonMethods), {}) return out
def __init__(self, x): self._initObjectArray(awkward.Table()) self["x"] = x
def open_file(filepath, njets=None): """ returns `X`, `y`, numpy arrays, in a format required by energyflow filepath: string, path to the .root file you wish to open - `X` : a three-dimensional numpy array of the jets with shape `(num_data,max_num_particles,5)`. 5: pt, eta, phi, E, tag - `y` : binary array, 1 for real b-jets """ # open the file sm_file = ur.open(filepath) # get all data in tree format sm_tree = sm_file['XhhMiniNtuple'] # get branches we care about branches = sm_tree.arrays(branches=[ 'resolvedJets_pt', 'resolvedJets_eta', 'resolvedJets_phi', 'resolvedJets_E', 'resolvedJets_HadronConeExclTruthLabelID', 'resolvedJets_is_DL1r_FixedCutBEff_77' ], namedecode='utf-8') # Meanings of the branches we took """ resolvedJets_pt: transverse momentum of each jet resolvedJets_eta: pseudorapidity of each jet resolvedJets_phi: azimuth of each jet (angle around beam) resolvedJets_E: energy of each jet resolvedJets_HadronConeExclTruthLabelID: see Monte Carlo paper, classification number, e.g. 5=bjet, 15=tau resolvedJets_is_DL1r_FixedCutBEff_77: whether or not a jet has been b-tagged """ # convert to "pandas-dataframe-style" table table = awkward.Table(branches) # use pt, eta, phi, E to make LorentzVectors for each jet lv = urm.TLorentzVectorArray.from_ptetaphie(table['resolvedJets_pt'], table['resolvedJets_eta'], table['resolvedJets_phi'], table['resolvedJets_E']) # add LVs to table table['resolved_lv'] = lv # add a "truth" category to the table, # based on whether or not a jet is a b-jet or not table['truth'] = (table['resolvedJets_HadronConeExclTruthLabelID'] == 5) table['truth'] = table['truth'].astype(np.int32) # and for convenience rename resolvedJets_is_DL1r_FixedCutBEff_77 to "tag" table['tag'] = table['resolvedJets_is_DL1r_FixedCutBEff_77'] # a few easier names to use later # number of jets overall table['njets'] = awkward.AwkwardArray.count(table.resolved_lv.pt) # number of b jets in each event table['nbjets'] = awkward.AwkwardArray.count_nonzero(table['truth']) # number of b tags in each event table['nbtags'] = awkward.AwkwardArray.count_nonzero(table['tag']) # sort table by tag indices = table["tag"].argsort() s_table = awkward.Table() for label in ['resolved_lv', 'truth', 'tag']: s_table[label] = table[label][indices] max_njets = max(table.njets) print("padding arrays") pt_arr = np.array([ np.concatenate((pt, [0] * (max_njets - len(pt)))) for pt in s_table.resolved_lv.pt ]) eta_arr = np.array([ np.concatenate((eta, [0] * (max_njets - len(eta)))) for eta in s_table.resolved_lv.eta ]) phi_arr = np.array([ np.concatenate((phi, [0] * (max_njets - len(phi)))) for phi in s_table.resolved_lv.phi ]) E_arr = np.array([ np.concatenate((e, [0] * (max_njets - len(e)))) for e in s_table.resolved_lv.E ]) tag_arr = np.array([ np.concatenate((tag, [0] * (max_njets - len(tag)))) for tag in s_table.tag ]) truth_arr = np.array([ np.concatenate((tru, [0] * (max_njets - len(tru)))) for tru in s_table.truth ]) print('done padding') if njets: pt_arr = pt_arr[:, :njets] eta_arr = eta_arr[:, :njets] phi_arr = phi_arr[:, :njets] E_arr = E_arr[:, :njets] tag_arr = tag_arr[:, :njets] truth_arr = truth_arr[:, :njets] # ensure the first 3 jets are tagged correctly events = np.ones((len(pt_arr)), dtype=bool) print(np.count_nonzero(events), 'events total') events[tag_arr[:, 0] == 0] = 0 events[tag_arr[:, 1] == 0] = 0 events[tag_arr[:, 2] == 0] = 0 events[truth_arr[:, 0] == 0] = 0 events[truth_arr[:, 1] == 0] = 0 events[truth_arr[:, 2] == 0] = 0 print(np.count_nonzero(events), 'events after ensuring first 3 are correctly tagged') # and ensure no other jets are tagged events[np.count_nonzero(tag_arr[:, 3:], axis=1) > 0] = 0 print(np.count_nonzero(events), 'events after ensuring we only have 3 tags') # 1 = should've been tagged, wasn't. 0 = correctly tagged (/ not tagged) untagged = np.logical_xor(truth_arr, tag_arr).astype(int) n_untagged = np.count_nonzero(untagged, axis=1) # ensure we only have at max one untagged jet events[n_untagged > 1] = 0 print(np.count_nonzero(events), 'events after ensuring there is at most 1 untagged jet') # create our data with only the filtered events pt_arr = pt_arr[events] eta_arr = eta_arr[events] phi_arr = phi_arr[events] E_arr = E_arr[events] tag_arr = tag_arr[events] truth_arr = truth_arr[events] if njets: X = np.zeros((len(pt_arr), njets, 5), dtype=float) else: X = np.zeros((len(pt_arr), max_njets, 5), dtype=float) X[:, :, 0] = pt_arr X[:, :, 1] = eta_arr X[:, :, 2] = phi_arr X[:, :, 3] = E_arr X[:, :, 4] = tag_arr # should be all zeros at this point # where does the untagged jet occur? missed_jet_events, missed_jet_index = np.where(untagged[events] == 1) # njets = no 4th jet, the rest means set that index's jet = 4th jet missed_jet = np.zeros(len(pt_arr), dtype=int) missed_jet += njets if njets else max_njets # don't pick a jet missed_jet[missed_jet_events] = missed_jet_index # unless you should if njets: missed_jet_arr = np.zeros((len(pt_arr), njets + 1), dtype=int) else: missed_jet_arr = np.zeros((len(pt_arr), max_njets + 1), dtype=int) for i, m in enumerate(missed_jet): missed_jet_arr[i][m] = 1 y = missed_jet_arr return X, y
def __init__(self, x, y, z, t): self._initObjectArray(awkward.Table()) self["fX"] = x self["fY"] = y self["fZ"] = z self["fE"] = t
def open_file(filepath, sort_by=None, pt_cut=None, eta_cut=None): """ open_file returns an awkward table, sorted by the parameter sort_by filepath: string, path to the .root file you wish to open sort_by: string, parameter with which to sort the table, currently only "tag", "phi", "eta", "pt" are options """ # open the file sm_file = ur.open(filepath) # get all data in tree format sm_tree = sm_file['XhhMiniNtuple'] # get branches we care about branches = sm_tree.arrays(branches=[ 'resolvedJets_pt', 'resolvedJets_eta', 'resolvedJets_phi', 'resolvedJets_E', 'resolvedJets_HadronConeExclTruthLabelID', 'resolvedJets_is_DL1r_FixedCutBEff_77', 'mcEventWeight' ], namedecode='utf-8') # Meanings of the branches we took """ resolvedJets_pt: transverse momentum of each jet resolvedJets_eta: pseudorapidity of each jet resolvedJets_phi: azimuth of each jet (angle around beam) resolvedJets_E: energy of each jet resolvedJets_HadronConeExclTruthLabelID: see Monte Carlo paper, classification number, e.g. 5=bjet, 15=tau resolvedJets_is_DL1r_FixedCutBEff_77: whether or not a jet has been b-tagged """ # convert to "pandas-dataframe-style" table table = awkward.Table(branches) # get important data pt = table['resolvedJets_pt'] eta = table['resolvedJets_eta'] phi = table['resolvedJets_phi'] E = table['resolvedJets_E'] truth = (table['resolvedJets_HadronConeExclTruthLabelID'] == 5).astype( np.int32) tag = table['resolvedJets_is_DL1r_FixedCutBEff_77'] print(len(pt), 'total events found') # apply cuts if needed if pt_cut != None: if pt_cut < 0: cut = pt <= abs(pt_cut) else: cut = pt > pt_cut pt = pt[cut] eta = eta[cut] phi = phi[cut] E = E[cut] truth = truth[cut] tag = tag[cut] #print(len(pt), 'events left after pt cut') if eta_cut != None: if eta_cut < 0: cut = abs(eta) >= abs(eta_cut) else: cut = abs(eta) < eta_cut pt = pt[cut] eta = eta[cut] phi = phi[cut] E = E[cut] truth = truth[cut] tag = tag[cut] #print(len(pt), 'events left after eta cut') # use pt, eta, phi, E to make LorentzVectors for each jet lv = urm.TLorentzVectorArray.from_ptetaphie(pt, eta, phi, E) # add LVs to table table['resolved_lv'] = lv # add a "truth" category to the table, # based on whether or not a jet is a b-jet or not table['truth'] = truth # and for convenience rename resolvedJets_is_DL1r_FixedCutBEff_77 to "tag" table['tag'] = tag # sort table if needed if sort_by is not None: print("sorting data by", sort_by) # indices of table, sorted by whatever variable is provided if sort_by == "pt": indices = table['resolved_lv'].pt.argsort() elif sort_by == "eta": indices = table['resolved_lv'].eta.argsort() elif sort_by == "phi": indices = table['resolved_lv'].phi.argsort() elif sort_by == "tag": indices = table["tag"].argsort() else: raise ValueError(f"sort_by={sort_by} is not yet supported") # make new sorted table with attributes we need, properly sorted s_table = awkward.Table() for label in ['resolved_lv', 'truth', 'tag']: s_table[label] = table[label][indices] s_table['mcEventWeight'] = table['mcEventWeight'] else: print("not sorting data") s_table = table # a few easier names to use later # number of jets overall s_table['njets'] = awkward.AwkwardArray.count(pt) # number of b jets in each event s_table['nbjets'] = awkward.AwkwardArray.count_nonzero(truth) # number of b tags in each event s_table['nbtags'] = awkward.AwkwardArray.count_nonzero(tag) return s_table
def __init__(self, x, y): self._initObjectArray(awkward.Table()) self["fX"] = x self["fY"] = y
import pandas as pd import backports.lzma from tqdm.auto import tqdm if __name__ == "__main__": os.system("mkdir -p tables/") os.system("mkdir -p jsons/") f = uproot.open("doublemu_lzma.root") t = f["Events"] raw = t.arrays(["/Muon_(pt|eta|phi|mass|charge)/"], outputtype=dict, namedecode="ascii") table = awkward.Table(raw) print(table.nbytes / 1e6) for i in range(20): data = [] for fcomp, fdecomp, label in tqdm([ [ lambda x: backports.lzma.compress(x), backports.lzma.decompress, "lzma" ], [lambda x: blosc.compress(x), blosc.decompress, "blosc"], # default should be blosc.SHUFFLE [ lambda x: blosc.compress(x, shuffle=blosc.NOSHUFFLE),
awkward.JaggedArray.fromoffsets(offsets, arrays[b"Electron_phi"].content), "mass": awkward.JaggedArray.fromoffsets(offsets, arrays[b"Electron_mass"].content), "cutBased": awkward.JaggedArray.fromoffsets(offsets, arrays[b"Electron_cutBased"].content), "pdgId": awkward.JaggedArray.fromoffsets(offsets, arrays[b"Electron_pdgId"].content), "pfRelIso03_all": awkward.JaggedArray.fromoffsets(offsets, arrays[b"Electron_pfRelIso03_all"].content) } electrons = physics_objects["Electron"] t = awkward.Table(electrons) awkward.toparquet("tmp.parquet", t) pa_table = awkward.toarrow(t) batches = pa_table.to_batches() batch = batches[0] sink = pa.BufferOutputStream() writer = pa.RecordBatchStreamWriter(sink, batch.schema) writer.write_batch(batch) writer.close() buf = sink.getvalue() reader = pa.ipc.open_stream(buf) batches2 = [b for b in reader]
def from_collections(wpartons_up=None, wpartons_dw=None, charged_leps=None, neutral_leps=None, bs=None, bbars=None, wbosons=None, tops=None, tbars=None): #set_trace() dilep_evts = ((charged_leps.counts == 2) & (charged_leps.counts == neutral_leps.counts) & (charged_leps.charge.sum() == 0)) dihad_evts = ((wpartons_up.counts == 2) & (wpartons_up.counts == wpartons_dw.counts)) semilep_evts = ((charged_leps.counts == 1) & (neutral_leps.counts == 1) & (wpartons_up.counts == 1) & (wpartons_dw.counts == 1)) valid_evts = (dilep_evts | dihad_evts | semilep_evts) if not (valid_evts.sum() == tbars.size): raise ValueError("Not all ttbar events are valid!") dl_array = np.repeat(dilep_evts, valid_evts.astype(int) * 2) dh_array = np.repeat(dihad_evts, valid_evts.astype(int) * 2) sl_array = np.repeat(semilep_evts, valid_evts.astype(int) * 2) if (bs[valid_evts].counts != 1).any(): raise ValueError("Number of b partons in valid events != 1") if (bbars[valid_evts].counts != 1).any(): raise ValueError("Number of bbar partons in valid events != 1") if (tops[valid_evts].counts != 1).any(): raise ValueError("Number of top partons in valid events != 1") if (tbars[valid_evts].counts != 1).any(): raise ValueError("Number of tbar partons in valid events != 1") # create leading/subleading objects from wpartons # init vars Lpt = np.ones(wpartons_up.counts.sum()) Leta = np.ones(wpartons_up.counts.sum()) Lphi = np.ones(wpartons_up.counts.sum()) Lmass = np.ones(wpartons_up.counts.sum()) Lcharge = np.zeros(wpartons_up.counts.sum()) LpdgId = np.zeros(wpartons_up.counts.sum()) Ldecaytype = np.ones(wpartons_up.counts.sum()) * 2 Spt = np.ones(wpartons_up.counts.sum()) Seta = np.ones(wpartons_up.counts.sum()) Sphi = np.ones(wpartons_up.counts.sum()) Smass = np.ones(wpartons_up.counts.sum()) Scharge = np.zeros(wpartons_up.counts.sum()) SpdgId = np.zeros(wpartons_up.counts.sum()) up_isLeading = (wpartons_up.pt > wpartons_dw.pt).flatten() # Leading Lpt = np.where(up_isLeading, wpartons_up.pt.flatten(), wpartons_dw.pt.flatten()) Leta = np.where(up_isLeading, wpartons_up.eta.flatten(), wpartons_dw.eta.flatten()) Lphi = np.where(up_isLeading, wpartons_up.phi.flatten(), wpartons_dw.phi.flatten()) Lmass = np.where(up_isLeading, wpartons_up.mass.flatten(), wpartons_dw.mass.flatten()) Lcharge = np.where(up_isLeading, wpartons_up.charge.flatten(), wpartons_dw.charge.flatten()) LpdgId = np.where(up_isLeading, wpartons_up.pdgId.flatten(), wpartons_dw.pdgId.flatten()) First = JaggedCandidateArray.candidatesfromcounts( counts=wpartons_up.counts, pt=Lpt, eta=Leta, phi=Lphi, mass=Lmass, charge=Lcharge, pdgId=LpdgId, decaytype=Ldecaytype, ) # Subleading Spt = np.where(~up_isLeading, wpartons_up.pt.flatten(), wpartons_dw.pt.flatten()) Seta = np.where(~up_isLeading, wpartons_up.eta.flatten(), wpartons_dw.eta.flatten()) Sphi = np.where(~up_isLeading, wpartons_up.phi.flatten(), wpartons_dw.phi.flatten()) Smass = np.where(~up_isLeading, wpartons_up.mass.flatten(), wpartons_dw.mass.flatten()) Scharge = np.where(~up_isLeading, wpartons_up.charge.flatten(), wpartons_dw.charge.flatten()) SpdgId = np.where(~up_isLeading, wpartons_up.pdgId.flatten(), wpartons_dw.pdgId.flatten()) Second = JaggedCandidateArray.candidatesfromcounts( counts=wpartons_up.counts, pt=Spt, eta=Seta, phi=Sphi, mass=Smass, charge=Scharge, pdgId=SpdgId, decaytype=Ldecaytype, ) #set_trace() # make objects from top/tbar decays GenB = JaggedCandidateArray.candidatesfromcounts( counts=valid_evts.astype(int), pt=bs[valid_evts].pt.flatten(), eta=bs[valid_evts].eta.flatten(), phi=bs[valid_evts].phi.flatten(), mass=bs[valid_evts].mass.flatten(), charge=bs[valid_evts].charge.flatten(), decaytype=wbosons[wbosons.charge == 1].decaytype.flatten(), ) GenTop = JaggedCandidateArray.candidatesfromcounts( counts=valid_evts.astype(int), pt=tops[valid_evts].pt.flatten(), eta=tops[valid_evts].eta.flatten(), phi=tops[valid_evts].phi.flatten(), mass=tops[valid_evts].mass.flatten(), charge=tops[valid_evts].charge.flatten(), decaytype=wbosons[wbosons.charge == 1].decaytype.flatten(), ) GenBbar = JaggedCandidateArray.candidatesfromcounts( counts=valid_evts.astype(int), pt=bbars[valid_evts].pt.flatten(), eta=bbars[valid_evts].eta.flatten(), phi=bbars[valid_evts].phi.flatten(), mass=bbars[valid_evts].mass.flatten(), charge=bbars[valid_evts].charge.flatten(), decaytype=wbosons[wbosons.charge == -1].decaytype.flatten(), ) GenTbar = JaggedCandidateArray.candidatesfromcounts( counts=valid_evts.astype(int), pt=tbars[valid_evts].pt.flatten(), eta=tbars[valid_evts].eta.flatten(), phi=tbars[valid_evts].phi.flatten(), mass=tbars[valid_evts].mass.flatten(), charge=tbars[valid_evts].charge.flatten(), decaytype=wbosons[wbosons.charge == -1].decaytype.flatten(), ) ttbars = (GenTop.p4 + GenTbar.p4) GenTTbar = JaggedCandidateArray.candidatesfromcounts( counts=valid_evts.astype(int), pt=ttbars.pt.flatten(), eta=ttbars.eta.flatten(), phi=ttbars.phi.flatten(), mass=ttbars.mass.flatten(), decaytype=wbosons[valid_evts].decaytype.sum( ), # 0 is for INVALID, 2 for DILEP, 3 for SEMILEP, 4 for HADRONIC ) #set_trace() ## make tables of TTbar event objects DILEP_evts = awkward.Table( TTbar=awkward.JaggedArray.fromcounts(dilep_evts.astype(int), GenTTbar[dilep_evts].flatten()), Top=awkward.JaggedArray.fromcounts(dilep_evts.astype(int), GenTop[dilep_evts].flatten()), Tbar=awkward.JaggedArray.fromcounts(dilep_evts.astype(int), GenTbar[dilep_evts].flatten()), B=awkward.JaggedArray.fromcounts(dilep_evts.astype(int), GenB[dilep_evts].flatten()), Bbar=awkward.JaggedArray.fromcounts(dilep_evts.astype(int), GenBbar[dilep_evts].flatten()), Wplus=awkward.JaggedArray.fromcounts( dilep_evts.astype(int), wbosons[wbosons.charge == 1][dilep_evts].flatten()), Wminus=awkward.JaggedArray.fromcounts( dilep_evts.astype(int), wbosons[wbosons.charge == -1][dilep_evts].flatten()), First_plus=awkward.JaggedArray.fromcounts( dilep_evts.astype(int), charged_leps[dilep_evts][charged_leps[dilep_evts].charge > 0]. flatten()), # charged lepton always made leading Second_plus=awkward.JaggedArray.fromcounts( dilep_evts.astype(int), neutral_leps[dilep_evts][charged_leps[dilep_evts].charge > 0]. flatten()), # neutral lepton always made subleading First_minus=awkward.JaggedArray.fromcounts( dilep_evts.astype(int), charged_leps[dilep_evts][charged_leps[dilep_evts].charge < 0]. flatten()), # charged lepton always made leading Second_minus=awkward.JaggedArray.fromcounts( dilep_evts.astype(int), neutral_leps[dilep_evts][charged_leps[dilep_evts].charge < 0]. flatten()), # neutral lepton always made subleading Up_plus=awkward.JaggedArray.fromcounts( dilep_evts.astype(int), neutral_leps[dilep_evts][ charged_leps[dilep_evts].charge > 0].flatten()), Down_plus=awkward.JaggedArray.fromcounts( dilep_evts.astype(int), charged_leps[dilep_evts][ charged_leps[dilep_evts].charge > 0].flatten()), Up_minus=awkward.JaggedArray.fromcounts( dilep_evts.astype(int), neutral_leps[dilep_evts][ charged_leps[dilep_evts].charge < 0].flatten()), Down_minus=awkward.JaggedArray.fromcounts( dilep_evts.astype(int), charged_leps[dilep_evts][ charged_leps[dilep_evts].charge < 0].flatten()), ) HAD_evts = awkward.Table( TTbar=awkward.JaggedArray.fromcounts(dihad_evts.astype(int), GenTTbar[dihad_evts].flatten()), Top=awkward.JaggedArray.fromcounts(dihad_evts.astype(int), GenTop[dihad_evts].flatten()), Tbar=awkward.JaggedArray.fromcounts(dihad_evts.astype(int), GenTbar[dihad_evts].flatten()), B=awkward.JaggedArray.fromcounts(dihad_evts.astype(int), GenB[dihad_evts].flatten()), Bbar=awkward.JaggedArray.fromcounts(dihad_evts.astype(int), GenBbar[dihad_evts].flatten()), Wplus=awkward.JaggedArray.fromcounts( dihad_evts.astype(int), wbosons[wbosons.charge == 1][dihad_evts].flatten()), Wminus=awkward.JaggedArray.fromcounts( dihad_evts.astype(int), wbosons[wbosons.charge == -1][dihad_evts].flatten()), First_plus=awkward.JaggedArray.fromcounts( dihad_evts.astype(int), First[First.charge > 0][dihad_evts].flatten()), Second_plus=awkward.JaggedArray.fromcounts( dihad_evts.astype(int), Second[Second.charge > 0][dihad_evts].flatten()), First_minus=awkward.JaggedArray.fromcounts( dihad_evts.astype(int), First[First.charge < 0][dihad_evts].flatten()), Second_minus=awkward.JaggedArray.fromcounts( dihad_evts.astype(int), Second[Second.charge < 0][dihad_evts].flatten()), Up_plus=awkward.JaggedArray.fromcounts( dihad_evts.astype(int), wpartons_up[wpartons_up.charge > 0][dihad_evts].flatten()), Down_plus=awkward.JaggedArray.fromcounts( dihad_evts.astype(int), wpartons_dw[wpartons_dw.charge > 0][dihad_evts].flatten()), Up_minus=awkward.JaggedArray.fromcounts( dihad_evts.astype(int), wpartons_up[wpartons_up.charge < 0][dihad_evts].flatten()), Down_minus=awkward.JaggedArray.fromcounts( dihad_evts.astype(int), wpartons_dw[wpartons_dw.charge < 0][dihad_evts].flatten()), ) # make Had/Lep decaying objects for SEMILEP events top_isLep = (GenTop.decaytype == 1)[semilep_evts].flatten() Lep_Top = JaggedCandidateArray.candidatesfromcounts( counts=semilep_evts.astype(int), pt=np.where(top_isLep, GenTop[semilep_evts].pt.flatten(), GenTbar[semilep_evts].pt.flatten()), eta=np.where(top_isLep, GenTop[semilep_evts].eta.flatten(), GenTbar[semilep_evts].eta.flatten()), phi=np.where(top_isLep, GenTop[semilep_evts].phi.flatten(), GenTbar[semilep_evts].phi.flatten()), mass=np.where(top_isLep, GenTop[semilep_evts].mass.flatten(), GenTbar[semilep_evts].mass.flatten()), charge=np.where(top_isLep, GenTop[semilep_evts].charge.flatten(), GenTbar[semilep_evts].charge.flatten()), decaytype=np.where(top_isLep, GenTop[semilep_evts].decaytype.flatten(), GenTbar[semilep_evts].decaytype.flatten()), ) Had_Top = JaggedCandidateArray.candidatesfromcounts( counts=semilep_evts.astype(int), pt=np.where(~top_isLep, GenTop[semilep_evts].pt.flatten(), GenTbar[semilep_evts].pt.flatten()), eta=np.where(~top_isLep, GenTop[semilep_evts].eta.flatten(), GenTbar[semilep_evts].eta.flatten()), phi=np.where(~top_isLep, GenTop[semilep_evts].phi.flatten(), GenTbar[semilep_evts].phi.flatten()), mass=np.where(~top_isLep, GenTop[semilep_evts].mass.flatten(), GenTbar[semilep_evts].mass.flatten()), charge=np.where(~top_isLep, GenTop[semilep_evts].charge.flatten(), GenTbar[semilep_evts].charge.flatten()), decaytype=np.where(~top_isLep, GenTop[semilep_evts].decaytype.flatten(), GenTbar[semilep_evts].decaytype.flatten()), ) Lep_B = JaggedCandidateArray.candidatesfromcounts( counts=semilep_evts.astype(int), pt=np.where(top_isLep, GenB[semilep_evts].pt.flatten(), GenBbar[semilep_evts].pt.flatten()), eta=np.where(top_isLep, GenB[semilep_evts].eta.flatten(), GenBbar[semilep_evts].eta.flatten()), phi=np.where(top_isLep, GenB[semilep_evts].phi.flatten(), GenBbar[semilep_evts].phi.flatten()), mass=np.where(top_isLep, GenB[semilep_evts].mass.flatten(), GenBbar[semilep_evts].mass.flatten()), charge=np.where(top_isLep, GenB[semilep_evts].charge.flatten(), GenBbar[semilep_evts].charge.flatten()), decaytype=np.where(top_isLep, GenB[semilep_evts].decaytype.flatten(), GenBbar[semilep_evts].decaytype.flatten()), ) Had_B = JaggedCandidateArray.candidatesfromcounts( counts=semilep_evts.astype(int), pt=np.where(~top_isLep, GenB[semilep_evts].pt.flatten(), GenBbar[semilep_evts].pt.flatten()), eta=np.where(~top_isLep, GenB[semilep_evts].eta.flatten(), GenBbar[semilep_evts].eta.flatten()), phi=np.where(~top_isLep, GenB[semilep_evts].phi.flatten(), GenBbar[semilep_evts].phi.flatten()), mass=np.where(~top_isLep, GenB[semilep_evts].mass.flatten(), GenBbar[semilep_evts].mass.flatten()), charge=np.where(~top_isLep, GenB[semilep_evts].charge.flatten(), GenBbar[semilep_evts].charge.flatten()), decaytype=np.where(~top_isLep, GenB[semilep_evts].decaytype.flatten(), GenBbar[semilep_evts].decaytype.flatten()), ) SEMILEP_evts = awkward.Table( TTbar=awkward.JaggedArray.fromcounts(semilep_evts.astype(int), GenTTbar[semilep_evts].flatten()), THad=awkward.JaggedArray.fromcounts(semilep_evts.astype(int), Had_Top.flatten()), TLep=awkward.JaggedArray.fromcounts(semilep_evts.astype(int), Lep_Top.flatten()), BHad=awkward.JaggedArray.fromcounts(semilep_evts.astype(int), Had_B.flatten()), BLep=awkward.JaggedArray.fromcounts(semilep_evts.astype(int), Lep_B.flatten()), WHad=awkward.JaggedArray.fromcounts( semilep_evts.astype(int), wbosons[wbosons.decaytype == 2][semilep_evts].flatten()), WLep=awkward.JaggedArray.fromcounts( semilep_evts.astype(int), wbosons[wbosons.decaytype == 1][semilep_evts].flatten()), Lepton=awkward.JaggedArray.fromcounts( semilep_evts.astype(int), charged_leps[semilep_evts].flatten()), Nu=awkward.JaggedArray.fromcounts( semilep_evts.astype(int), neutral_leps[semilep_evts].flatten()), WJa=awkward.JaggedArray.fromcounts(semilep_evts.astype(int), First[semilep_evts].flatten()), WJb=awkward.JaggedArray.fromcounts(semilep_evts.astype(int), Second[semilep_evts].flatten()), Up_Had=awkward.JaggedArray.fromcounts( semilep_evts.astype(int), wpartons_up[semilep_evts].flatten()), Down_Had=awkward.JaggedArray.fromcounts( semilep_evts.astype(int), wpartons_dw[semilep_evts].flatten()), ) GenTTbar = awkward.Table( SL=SEMILEP_evts, DL=DILEP_evts, Had=HAD_evts, ) return GenTTbar
def candidatesfromoffsets(cls, offsets, **kwargs): """ cands = JaggedCandidateArray.candidatesfromoffsets(offsets=offsets, pt=column1, eta=column2, phi=column3, mass=column4, ...) """ items = kwargs argkeys = items.keys() p4 = None fast_pt = None fast_eta = None fast_phi = None fast_mass = None if 'p4' in argkeys: p4 = items['p4'] if not isinstance(p4, uproot_methods.TLorentzVectorArray): p4 = uproot_methods.TLorentzVectorArray.from_cartesian( p4[:, 0], p4[:, 1], p4[:, 2], p4[:, 3]) fast_pt = _fast_pt(p4) fast_eta = _fast_eta(p4) fast_phi = _fast_phi(p4) fast_mass = _fast_mass(p4) elif 'pt' in argkeys and 'eta' in argkeys and 'phi' in argkeys and 'mass' in argkeys: p4 = uproot_methods.TLorentzVectorArray.from_ptetaphim( items['pt'], items['eta'], items['phi'], items['mass']) fast_pt = items['pt'] fast_eta = items['eta'] fast_phi = items['phi'] fast_mass = items['mass'] del items['pt'] del items['eta'] del items['phi'] del items['mass'] elif 'pt' in argkeys and 'eta' in argkeys and 'phi' in argkeys and 'energy' in argkeys: p4 = uproot_methods.TLorentzVectorArray.from_ptetaphi( items['pt'], items['eta'], items['phi'], items['energy']) fast_pt = items['pt'] fast_eta = items['eta'] fast_phi = items['phi'] fast_mass = _fast_mass(p4) del items['pt'] del items['eta'] del items['phi'] del items['energy'] elif 'px' in argkeys and 'py' in argkeys and 'pz' in argkeys and 'mass' in argkeys: p4 = uproot_methods.TLorentzVectorArray.from_xyzm( items['px'], items['py'], items['pz'], items['mass']) fast_pt = _fast_pt(p4) fast_eta = _fast_eta(p4) fast_phi = _fast_phi(p4) fast_mass = items['mass'] del items['px'] del items['py'] del items['pz'] del items['mass'] elif 'pt' in argkeys and 'phi' in argkeys and 'pz' in argkeys and 'energy' in argkeys: p4 = uproot_methods.TLorentzVectorArray.from_cylindrical( items['pt'], items['phi'], items['pz'], items['energy']) fast_pt = items['pt'] fast_eta = _fast_eta(p4) fast_phi = items['phi'] fast_mass = _fast_mass(p4) del items['pt'] del items['phi'] del items['pz'] del items['energy'] elif 'px' in argkeys and 'py' in argkeys and 'pz' in argkeys and 'energy' in argkeys: p4 = uproot_methods.TLorentzVectorArray.from_cartesian( items['px'], items['py'], items['pz'], items['energy']) fast_pt = _fast_pt(p4) fast_eta = _fast_eta(p4) fast_phi = _fast_phi(p4) fast_mass = _fast_mass(p4) del items['px'] del items['py'] del items['pz'] del items['energy'] elif 'p' in argkeys and 'theta' in argkeys and 'phi' in argkeys and 'energy' in argkeys: p4 = uproot_methods.TLorentzVectorArray.from_spherical( items['p'], items['theta'], items['phi'], items['energy']) fast_pt = _fast_pt(p4) fast_eta = _fast_eta(p4) fast_phi = items['phi'] fast_mass = _fast_mass(p4) del items['p'] del items['theta'] del items['phi'] del items['energy'] elif 'p3' in argkeys and 'energy' in argkeys: p4 = uproot_methods.TLorentzVectorArray.from_p3( items['p3'], items['energy']) fast_pt = _fast_pt(p4) fast_eta = _fast_eta(p4) fast_phi = _fast_phi(p4) fast_mass = _fast_mass(p4) del items['p3'] del items['energy'] else: raise Exception( 'No valid definition of four-momentum found to build JaggedCandidateArray' ) items['p4'] = p4 items['__fast_pt'] = fast_pt items['__fast_eta'] = fast_eta items['__fast_phi'] = fast_phi items['__fast_mass'] = fast_mass return cls.fromoffsets(offsets, awkward.Table(items))
def arrow_table(self): for object_array in self.event_iterator.iterate(): unicode_array = {} for key in object_array.keys(): unicode_array[key.decode('UTF8')] = object_array[key] yield awkward.toarrow(awkward.Table(unicode_array))
def run_query(input_filenames=None, tree_name=None): import awkward, uproot return (lambda event: (awkward.Table if hasattr(awkward, 'Table') else awkward['Table'])((event.MVA3lCERN_weight_ttH if hasattr(event, 'MVA3lCERN_weight_ttH') else event['MVA3lCERN_weight_ttH'])))((lambda event: event[(((((((((((((((((((((((((((event.trilep_type if hasattr(event, 'trilep_type') else event['trilep_type']) > 0) & ((event.nTaus_OR_Pt25 if hasattr(event, 'nTaus_OR_Pt25') else event['nTaus_OR_Pt25']) == 0)) & (abs((event.total_charge if hasattr(event, 'total_charge') else event['total_charge'])) == 1)) & ((event.nJets_OR_T if hasattr(event, 'nJets_OR_T') else event['nJets_OR_T']) >= 2)) & ((event.nJets_OR_T_MV2c10_70 if hasattr(event, 'nJets_OR_T_MV2c10_70') else event['nJets_OR_T_MV2c10_70']) > 0)) & ((event.lep_Pt_1 if hasattr(event, 'lep_Pt_1') else event['lep_Pt_1']) > 15000.0)) & ((event.lep_Pt_2 if hasattr(event, 'lep_Pt_2') else event['lep_Pt_2']) > 15000.0)) & ((event.lep_isolationFixedCutLoose_0 if hasattr(event, 'lep_isolationFixedCutLoose_0') else event['lep_isolationFixedCutLoose_0']) > 0)) & (abs(((event.Mlll012 if hasattr(event, 'Mlll012') else event['Mlll012']) - 91200.0)) > 10000.0)) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1']))) | ((event.Mll01 if hasattr(event, 'Mll01') else event['Mll01']) > 12000.0))) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2']))) | ((event.Mll02 if hasattr(event, 'Mll02') else event['Mll02']) > 12000.0))) & (((((abs((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0'])) == 13) & ((event.lep_isMedium_0 if hasattr(event, 'lep_isMedium_0') else event['lep_isMedium_0']) > 0)) | (abs((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0'])) == 11)) & (((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 11) & (abs((event.lep_Eta_1 if hasattr(event, 'lep_Eta_1') else event['lep_Eta_1'])) < 2.0)) | ((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 13) & ((event.lep_isMedium_1 if hasattr(event, 'lep_isMedium_1') else event['lep_isMedium_1']) > 0)))) & (((abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2'])) == 11) & (abs((event.lep_Eta_2 if hasattr(event, 'lep_Eta_2') else event['lep_Eta_2'])) < 2.0)) | ((abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2'])) == 13) & ((event.lep_isMedium_2 if hasattr(event, 'lep_isMedium_2') else event['lep_isMedium_2']) > 0))))) & ((((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) * abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2']))) != 169) & ((event.DRll12 if hasattr(event, 'DRll12') else event['DRll12']) > 0.5)) | ((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) * abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2']))) == 169))) & ((event.Mll12 if hasattr(event, 'Mll12') else event['Mll12']) > 12000.0)) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1']))) | (abs(((event.Mll01 if hasattr(event, 'Mll01') else event['Mll01']) - 91200.0)) > 10000.0))) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2']))) | (abs(((event.Mll02 if hasattr(event, 'Mll02') else event['Mll02']) - 91200.0)) > 10000.0))) & ((event.MVA3lCERN_weight_ttH if hasattr(event, 'MVA3lCERN_weight_ttH') else event['MVA3lCERN_weight_ttH']) > (-1))) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1']))) | (abs(((event.Mll01 if hasattr(event, 'Mll01') else event['Mll01']) - 91200.0)) > 10000.0))) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) != (-(event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2']))) | (abs(((event.Mll02 if hasattr(event, 'Mll02') else event['Mll02']) - 91200.0)) > 10000.0))) & ((event.MVA3lCERN_weight_ttH if hasattr(event, 'MVA3lCERN_weight_ttH') else event['MVA3lCERN_weight_ttH']) > 0.3)) & ((event.MVA3lCERN_weight_ttW if hasattr(event, 'MVA3lCERN_weight_ttW') else event['MVA3lCERN_weight_ttW']) < 0.75)) & ((event.MVA3lCERN_weight_ttZ if hasattr(event, 'MVA3lCERN_weight_ttZ') else event['MVA3lCERN_weight_ttZ']) < 0.75)) & ((event.MVA3lCERN_weight_VV if hasattr(event, 'MVA3lCERN_weight_VV') else event['MVA3lCERN_weight_VV']) < 0.75)) & ((event.MVA3lCERN_weight_ttbar if hasattr(event, 'MVA3lCERN_weight_ttbar') else event['MVA3lCERN_weight_ttbar']) < 0.3)) & ((((((((event.dilep_type if hasattr(event, 'dilep_type') else event['dilep_type']) > 0) & (((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0']) * (event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) > 0)) & ((event.lep_isQMisID_1 if hasattr(event, 'lep_isQMisID_1') else event['lep_isQMisID_1']) == 0)) & ((event.lep_isQMisID_0 if hasattr(event, 'lep_isQMisID_0') else event['lep_isQMisID_0']) == 0)) | ((((event.trilep_type if hasattr(event, 'trilep_type') else event['trilep_type']) > 0) & ((event.lep_isQMisID_2 if hasattr(event, 'lep_isQMisID_2') else event['lep_isQMisID_2']) == 0)) & ((event.lep_isQMisID_1 if hasattr(event, 'lep_isQMisID_1') else event['lep_isQMisID_1']) == 0))) | (((event.quadlep_type if hasattr(event, 'quadlep_type') else event['quadlep_type']) > 0) & ((event.FSF_4L_tot if hasattr(event, 'FSF_4L_tot') else event['FSF_4L_tot']) == 1))) & (((((((((event.dilep_type if hasattr(event, 'dilep_type') else event['dilep_type']) > 0) & (((((abs((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0'])) == 13) & ((event.lep_isMedium_0 if hasattr(event, 'lep_isMedium_0') else event['lep_isMedium_0']) > 0)) & ((event.lep_isolationFixedCutLoose_0 if hasattr(event, 'lep_isolationFixedCutLoose_0') else event['lep_isolationFixedCutLoose_0']) > 0)) & ((event.lep_promptLeptonVeto_TagWeight_0 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_0') else event['lep_promptLeptonVeto_TagWeight_0']) < (-0.5))) | ((((((abs((event.lep_ID_0 if hasattr(event, 'lep_ID_0') else event['lep_ID_0'])) == 11) & ((event.lep_isolationFixedCutLoose_0 if hasattr(event, 'lep_isolationFixedCutLoose_0') else event['lep_isolationFixedCutLoose_0']) > 0)) & ((event.lep_isTightLH_0 if hasattr(event, 'lep_isTightLH_0') else event['lep_isTightLH_0']) > 0)) & ((event.lep_chargeIDBDTTight_0 if hasattr(event, 'lep_chargeIDBDTTight_0') else event['lep_chargeIDBDTTight_0']) > 0.7)) & ((event.lep_ambiguityType_0 if hasattr(event, 'lep_ambiguityType_0') else event['lep_ambiguityType_0']) == 0)) & ((event.lep_promptLeptonVeto_TagWeight_0 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_0') else event['lep_promptLeptonVeto_TagWeight_0']) < (-0.7))))) & (((((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 13) & ((event.lep_isMedium_1 if hasattr(event, 'lep_isMedium_1') else event['lep_isMedium_1']) > 0)) & ((event.lep_isolationFixedCutLoose_1 if hasattr(event, 'lep_isolationFixedCutLoose_1') else event['lep_isolationFixedCutLoose_1']) > 0)) & ((event.lep_promptLeptonVeto_TagWeight_1 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_1') else event['lep_promptLeptonVeto_TagWeight_1']) < (-0.5))) | ((((((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 11) & ((event.lep_isolationFixedCutLoose_1 if hasattr(event, 'lep_isolationFixedCutLoose_1') else event['lep_isolationFixedCutLoose_1']) > 0)) & ((event.lep_isTightLH_1 if hasattr(event, 'lep_isTightLH_1') else event['lep_isTightLH_1']) > 0)) & ((event.lep_chargeIDBDTTight_1 if hasattr(event, 'lep_chargeIDBDTTight_1') else event['lep_chargeIDBDTTight_1']) > 0.7)) & ((event.lep_ambiguityType_1 if hasattr(event, 'lep_ambiguityType_1') else event['lep_ambiguityType_1']) == 0)) & ((event.lep_promptLeptonVeto_TagWeight_1 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_1') else event['lep_promptLeptonVeto_TagWeight_1']) < (-0.7))))) | ((((event.trilep_type if hasattr(event, 'trilep_type') else event['trilep_type']) > 0) & ((event.nTaus_OR_Pt25 if hasattr(event, 'nTaus_OR_Pt25') else event['nTaus_OR_Pt25']) == 0)) & (((((abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2'])) == 13) & ((event.lep_isolationFixedCutLoose_2 if hasattr(event, 'lep_isolationFixedCutLoose_2') else event['lep_isolationFixedCutLoose_2']) > 0)) & ((event.lep_promptLeptonVeto_TagWeight_2 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_2') else event['lep_promptLeptonVeto_TagWeight_2']) < (-0.5))) | ((((((abs((event.lep_ID_2 if hasattr(event, 'lep_ID_2') else event['lep_ID_2'])) == 11) & ((event.lep_isolationFixedCutLoose_2 if hasattr(event, 'lep_isolationFixedCutLoose_2') else event['lep_isolationFixedCutLoose_2']) > 0)) & ((event.lep_isTightLH_2 if hasattr(event, 'lep_isTightLH_2') else event['lep_isTightLH_2']) > 0)) & ((event.lep_chargeIDBDTTight_2 if hasattr(event, 'lep_chargeIDBDTTight_2') else event['lep_chargeIDBDTTight_2']) > 0.7)) & ((event.lep_promptLeptonVeto_TagWeight_2 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_2') else event['lep_promptLeptonVeto_TagWeight_2']) < (-0.7))) & ((event.lep_ambiguityType_2 if hasattr(event, 'lep_ambiguityType_2') else event['lep_ambiguityType_2']) == 0))) & ((((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 13) & ((event.lep_isolationFixedCutLoose_1 if hasattr(event, 'lep_isolationFixedCutLoose_1') else event['lep_isolationFixedCutLoose_1']) > 0)) & ((event.lep_promptLeptonVeto_TagWeight_1 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_1') else event['lep_promptLeptonVeto_TagWeight_1']) < (-0.5))) | ((((((abs((event.lep_ID_1 if hasattr(event, 'lep_ID_1') else event['lep_ID_1'])) == 11) & ((event.lep_isolationFixedCutLoose_1 if hasattr(event, 'lep_isolationFixedCutLoose_1') else event['lep_isolationFixedCutLoose_1']) > 0)) & ((event.lep_isTightLH_1 if hasattr(event, 'lep_isTightLH_1') else event['lep_isTightLH_1']) > 0)) & ((event.lep_chargeIDBDTTight_1 if hasattr(event, 'lep_chargeIDBDTTight_1') else event['lep_chargeIDBDTTight_1']) > 0.7)) & ((event.lep_promptLeptonVeto_TagWeight_1 if hasattr(event, 'lep_promptLeptonVeto_TagWeight_1') else event['lep_promptLeptonVeto_TagWeight_1']) < (-0.7))) & ((event.lep_ambiguityType_1 if hasattr(event, 'lep_ambiguityType_1') else event['lep_ambiguityType_1']) == 0)))))) | (((event.dilep_type if hasattr(event, 'dilep_type') else event['dilep_type']) > 0) & ((event.nTaus_OR_Pt25 if hasattr(event, 'nTaus_OR_Pt25') else event['nTaus_OR_Pt25']) > 1))) | ((((event.dilep_type if hasattr(event, 'dilep_type') else event['dilep_type']) > 0) | ((event.trilep_type if hasattr(event, 'trilep_type') else event['trilep_type']) > 0)) == 0)) | ((event.quadlep_type if hasattr(event, 'quadlep_type') else event['quadlep_type']) > 0)) | (((event.trilep_type if hasattr(event, 'trilep_type') else event['trilep_type']) > 0) & ((event.nTaus_OR_Pt25 if hasattr(event, 'nTaus_OR_Pt25') else event['nTaus_OR_Pt25']) > 0))))) | ((event.is1L2Tau if hasattr(event, 'is1L2Tau') else event['is1L2Tau']) > 0))])((lambda input_files: uproot.lazyarrays(input_files, tree_name if tree_name is not None else (lambda key_array: key_array[key_array[:, 1] == 'TTree'][:, 0])(awkward.Table(uproot.open(input_files[0]).classnames()).unzip()[0])[0]))(input_filenames)))