class CompareSpring15: def __init__(self): self.ref = "" self.test = "" self.cref = None self.ctest = None self.lref = [] self.ltest = [] self.ref_missing = [] self.test_missing = [] self.bad_events = [] self.bad_leptons = [] self.bad_met = [] self.bad_mvamet = [] self.bad_jets = [] self.good_events = [] def load(self, ref, test): self.ref = ref self.test = test #self.cref=TChain(ref.split(":")[1]) #self.ctest=TChain(test.split(":")[1]) #self.cref.Add(ref.split(":")[0]) #self.ctest.Add(test.split(":")[0]) self.fref = TFile(ref.split(":")[0]) self.ftest = TFile(test.split(":")[0]) self.cref = TTree() self.fref.GetObject(ref.split(":")[1], self.cref) self.ctest = TTree() self.ftest.GetObject(test.split(":")[1], self.ctest) self.lref = load_entries(self.cref) self.ltest = load_entries(self.ctest) def Compare(self): print self.cref.GetEntries(), self.ctest.GetEntries() self.ref_min_pt_1 = 9999999999. self.ref_min_pt_2 = 9999999999. self.test_min_pt_1 = 9999999999. self.test_min_pt_2 = 9999999999. iref = 0 itest = 0 self.cref.LoadBaskets(2000000000) self.ctest.LoadBaskets(2000000000) while (iref < len(self.lref)): ref_id = self.lref[iref][1] while (itest < len(self.ltest)): test_id = self.ltest[itest][1] if (test_id < ref_id): self.ref_missing.append(self.ltest[itest]) elif (test_id > ref_id): self.test_missing.append(self.lref[iref]) break else: break itest += 1 if (test_id != ref_id): iref += 1 continue if (self.cref.pt_1 < self.ref_min_pt_1): self.ref_min_pt_1 = self.cref.pt_1 if (self.cref.pt_2 < self.ref_min_pt_2): self.ref_min_pt_2 = self.cref.pt_2 if (self.ctest.pt_1 < self.test_min_pt_1): self.test_min_pt_1 = self.ctest.pt_1 if (self.ctest.pt_2 < self.test_min_pt_2): self.test_min_pt_2 = self.ctest.pt_2 isGood = True self.cref.GetEntry(self.lref[iref][0]) self.ctest.GetEntry(self.ltest[itest][0]) # compare leptons if (not areEqual(self.cref.pt_1, self.ctest.pt_1) or not areEqual(self.cref.iso_1, self.ctest.iso_1) or not areEqual(self.cref.pt_2, self.ctest.pt_2) or not areEqual(self.cref.iso_2, self.ctest.iso_2)): isGood = False print "Event", self.lref[iref][1] print " lep1: pt=",self.cref.pt_1, self.ctest.pt_1,\ ", eta=",self.cref.eta_1,self.ctest.eta_1,\ ", phi=",self.cref.phi_1,self.ctest.phi_1,\ ", iso=",self.cref.iso_1,self.ctest.iso_1,\ ", q=",self.cref.q_1,self.ctest.q_1 print " lep2: pt=",self.cref.pt_2, self.ctest.pt_2,\ ", eta=",self.cref.eta_2,self.ctest.eta_2,\ ", phi=",self.cref.phi_2,self.ctest.phi_2,\ ", iso=",self.cref.iso_2,self.ctest.iso_2,\ ", q=",self.cref.q_2,self.ctest.q_2 refDR = deltaR(self.cref.eta_1, self.cref.phi_1, self.cref.eta_2, self.cref.phi_2) testDR = deltaR(self.ctest.eta_1, self.ctest.phi_1, self.ctest.eta_2, self.ctest.phi_2) print " deltaR(lep1, lep2)=", refDR, testDR self.bad_leptons.append((self.lref[iref], self.ltest[itest])) # compare met if (not areEqual(self.cref.met, self.ctest.met)): isGood = False print "Event", self.lref[iref][1] print " met: |met|=", self.cref.met, self.ctest.met self.bad_met.append((self.lref[iref], self.ltest[itest])) iref += 1 itest += 1 def Print(self): print len(self.ref_missing), "Events missing in ref tree" print len(self.test_missing), "Events missing in test tree" print "Events missing in test tree:" print[x[1] for x in self.test_missing] print print "Events missing in ref tree:" print[x[1] for x in self.ref_missing] print print len(self.bad_leptons), "Events with bad leptons" print[x[0][1] for x in self.bad_leptons] print print len(self.bad_met), "Events with bad pfmet" print[x[0][1] for x in self.bad_met] print self.ref_min_pt_1, self.test_min_pt_1 print self.ref_min_pt_2, self.test_min_pt_2