def test_simple_example(ak_HZZ_example): assert ( repr(ak_HZZ_example) == "<Array [[{x: -52.9, y: -11.7, ... t: 69.6}]] type='2421 * var * LorentzXYZT[\"x\":...'>" ) # This new array understands that data labeled "LorentzXYZT" should have the above methods. example2 = ak.Array(ak_HZZ_example, behavior=behavior) assert ( repr(example2) == "<LorentzXYZTArray [[Lxyz(-52.9 -11.7 -8.16 54.8), ... ] type='2421 * var * Loren...'>" ) assert repr(example2[0, 0]) == "Lxyz(-52.9 -11.7 -8.16 54.8)" assert type(example2[0, 0]) is vector.awkward.lorentz.xyzt.LorentzXYZT assert example2[0, 0].mag == approx(0.10559298741436905) assert ( repr(example2.mass) == "<Array [[0.106, 0.105], ... [0.104]] type='2421 * var * float64'>" ) # We need a "ak.sizes" function with a simpler interface than this... hastwo = ak.count(example2, axis=-1).x >= 2 assert ( str(example2[hastwo, 0] + example2[hastwo, 1]) == "[Lxyz(-15.2 -11 -19.5 94.2), Lxyz(49.8 8.08 48.1 102), ... Lxyz(2.94 18.4 -262 273)]" ) assert ( str((example2[hastwo, 0] + example2[hastwo, 1]).mag) == "[90.2, 74.7, 89.8, 94.9, 92.1, 53.4, 89.8, ... 91.7, 88.8, 101, 91.5, 92.1, 85.4, 76]" )
def test(): nums = [[ 17, 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 17, 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 17, 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 17, 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 17, 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 17, 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 17, 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 17, 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 17, 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 17, 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]] sample = [] for outer in nums: sample.append([]) for inner in outer: sample[-1].append([0] * inner) assert awkward1.is_valid(awkward1.count(sample, axis=0))
#HadW is mask for Quark deacying W boson hadW = ak.num(W_Events, axis=2) == 2 #filters out t_events that have a hadronically decayign W Boson hadB = t_Events[hadW] hadB = ak.flatten(hadB, axis=2) W_quarks = W_Events[hadW] W_quarks = ak.flatten(W_quarks, axis=2) #concatentating these two arrays make an array of events with the correctly decaying GenParticles. qqb = ak.concatenate([hadB, W_quarks], axis=1) print("qqb Genparts matched") #Filtering Out events with extra tops final = final[(ak.count(qqb.pdgId, axis=1) == 3)] finaljets = final.Jet qqb = qqb[(ak.count(qqb.pdgId, axis=1) == 3)] #Implementing Tight Jet Cuts on Training Data finaljetSel = (abs(finaljets.eta) < 2.4) & (finaljets.pt > 30) finalJets = finaljets[finaljetSel] #Use nearest to match Jets matchedGenJets = qqb.nearest(final.GenJet) matchedJets = matchedGenJets.nearest(finalJets) print("matched genpart to genjet and finally to reco jets") #Assigning True false to sets of 3 jets test = matchedJets.genJetIdx combs = ak.combinations(finalJets, 3, replacement=False)
def process(self, events): output = self.accumulator.identity() dataset = events.metadata['dataset'] output['sumw'][dataset] += ak.sum(events.genWeight) ############## # Trigger level triggers = [ "HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ", "HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ", ] trig_arrs = [events.HLT[_trig.strip("HLT_")] for _trig in triggers] req_trig = np.zeros(len(events), dtype='bool') for t in trig_arrs: req_trig = req_trig | t ############ # Event level ## Muon cuts # muon twiki: https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideMuonIdRun2 events.Muon = events.Muon[(events.Muon.pt > 30) & (abs(events.Muon.eta < 2.4))] # & (events.Muon.tightId > .5) events.Muon = ak.pad_none(events.Muon, 1, axis=1) req_muon =(ak.count(events.Muon.pt, axis=1) == 1) ## Electron cuts # electron twiki: https://twiki.cern.ch/twiki/bin/viewauth/CMS/CutBasedElectronIdentificationRun2 events.Electron = events.Electron[(events.Electron.pt > 30) & (abs(events.Electron.eta) < 2.4)] events.Electron = ak.pad_none(events.Electron, 1, axis=1) req_ele = (ak.count(events.Electron.pt, axis=1) == 1) ## Jet cuts events.Jet = events.Jet[(events.Jet.pt > 25) & (abs(events.Jet.eta) <= 2.5)] req_jets = (ak.count(events.Jet.pt, axis=1) >= 2) req_opposite_charge = events.Electron[:, 0].charge * events.Muon[:, 0].charge == -1 event_level = req_trig & req_muon & req_ele & req_opposite_charge & req_jets # Selected selev = events[event_level] ######### # Per electron el_eta = (abs(selev.Electron.eta) <= 2.4) el_pt = selev.Electron.pt > 30 el_level = el_eta & el_pt # Per muon mu_eta = (abs(selev.Muon.eta) <= 2.4) mu_pt = selev.Muon.pt > 30 mu_level = mu_eta & mu_pt # Per jet jet_eta = (abs(selev.Jet.eta) <= 2.4) jet_pt = selev.Jet.pt > 25 jet_pu = ( ((selev.Jet.puId > 6) & (selev.Jet.pt < 50)) | (selev.Jet.pt > 50) ) jet_id = selev.Jet.jetId >= 2 #jet_id = selev.Jet.isTight() == 1 & selev.Jet.isTightLeptonVeto() == 0 jet_level = jet_pu & jet_eta & jet_pt & jet_id # b-tag twiki : https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation102X bjet_disc_t = selev.Jet.btagDeepB > 0.7264 # L=0.0494, M=0.2770, T=0.7264 bjet_disc_m = selev.Jet.btagDeepB > 0.2770 # L=0.0494, M=0.2770, T=0.7264 bjet_disc_l = selev.Jet.btagDeepB > 0.0494 # L=0.0494, M=0.2770, T=0.7264 bjet_level_t = jet_level & bjet_disc_t bjet_level_m = jet_level & bjet_disc_m bjet_level_l = jet_level & bjet_disc_l sel = selev.Electron[el_level] smu = selev.Muon[mu_level] sjets = selev.Jet[jet_level] sbjets_t = selev.Jet[bjet_level_t] sbjets_m = selev.Jet[bjet_level_m] sbjets_l = selev.Jet[bjet_level_l] # output['pt'].fill(dataset=dataset, pt=selev.Jet.pt.flatten()) # Fill histograms dynamically for histname, h in output.items(): if (histname not in self.jet_hists) and (histname not in self.deepcsv_hists): continue # Get valid fields perhistogram to fill fields = {k: ak.flatten(sjets[k], axis=None) for k in h.fields if k in dir(sjets)} h.fill(dataset=dataset, **fields) def flatten(ar): # flatten awkward into a 1d array to hist return ak.flatten(ar, axis=None) def num(ar): return ak.num(ak.fill_none(ar[~ak.is_none(ar)], 0), axis=0) output['njet'].fill(dataset=dataset, njet=flatten(ak.num(sjets))) output['nbjet_t'].fill(dataset=dataset, nbjet_t=flatten(ak.num(sbjets_t))) output['nbjet_m'].fill(dataset=dataset, nbjet_m=flatten(ak.num(sbjets_m))) output['nbjet_l'].fill(dataset=dataset, nbjet_l=flatten(ak.num(sbjets_l))) output['nel'].fill(dataset=dataset, nel=flatten(ak.num(sel))) output['nmu'].fill(dataset=dataset, nmu=flatten(ak.num(smu))) output['lelpt'].fill(dataset=dataset, lelpt=flatten(selev.Electron[:, 0].pt)) output['lmupt'].fill(dataset=dataset, lmupt=flatten(selev.Muon[:, 0].pt)) output['ljpt'].fill(dataset=dataset, ljpt=flatten(selev.Jet[:, 0].pt)) output['sljpt'].fill(dataset=dataset, sljpt=flatten(selev.Jet[:, 1].pt)) return output