Ejemplo n.º 1
0
    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
Ejemplo n.º 3
0
    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]
Ejemplo n.º 4
0
 def table(self):
     out = awkward.Table()
     out._view = self._view
     out._base = self._base
     out._rowname = self._rowname
     out._contents = self._contents
     return out
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
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))
Ejemplo n.º 9
0
    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]
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
    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()
Ejemplo n.º 12
0
    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__))
Ejemplo n.º 13
0
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
Ejemplo n.º 14
0
 def __init__(self, x):
     self._initObjectArray(awkward.Table())
     self["x"] = x
Ejemplo n.º 15
0
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
Ejemplo n.º 16
0
 def __init__(self, x, y, z, t):
     self._initObjectArray(awkward.Table())
     self["fX"] = x
     self["fY"] = y
     self["fZ"] = z
     self["fE"] = t
Ejemplo n.º 17
0
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
Ejemplo n.º 18
0
 def __init__(self, x, y):
     self._initObjectArray(awkward.Table())
     self["fX"] = x
     self["fY"] = y
Ejemplo n.º 19
0
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),
Ejemplo n.º 20
0
    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]
Ejemplo n.º 21
0
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
Ejemplo n.º 22
0
    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))
Ejemplo n.º 24
0
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)))