def setUp(self): """ Create an external file with a tree (scalar and vector branch) and create tags and a sample using the external file. """ # create temporary directory super(TQTreeFormulaObservableTest, self).setUp() # create ROOT file and empty tree file = TFile( os.path.join(self.tempdir, "TQTreeFormulaObservable.root"), "recreate") tree = TTree("NOMINAL", "") x = array("d", [3.14]) tree.Branch("n_taus", x, "n_taus/D") vec = std_vector('double')() vec.push_back(1.42) vec.push_back(2.72) tree.Branch("tau_pt", vec) tree.Fill() x[0] = 42 vec.clear() vec.push_back(125.16) tree.Fill() tree.Write() file.Close() # create tags and sample self.tags = TQTaggable("a=n_taus,b=tau_pt") self.sample = TQSample("sample") self.sample.importTags(self.tags) self.sample = TQSample("sample") self.sample.setTreeLocation( os.path.join(self.tempdir, "TQTreeFormulaObservable.root:NOMINAL"))
def setUp(self): """ Create an external file with a single, empty tree and create tags and a sample using the external file. """ # create temporary directory super(TQFilterObservableTest, self).setUp() # create ROOT file and empty tree file = TFile( os.path.join(self.tempdir, "TQFilterObservable.root"), "recreate") tree = TTree("NOMINAL", "") tree.Write() file.Close() # create tags and sample self.tags = TQTaggable("a=2.2,b=3.3") self.tags.setTagBool("c", True) self.sample = TQSample("sample") self.sample.importTags(self.tags) self.sample.setTreeLocation( os.path.join(self.tempdir, "TQFilterObservable.root:NOMINAL"))
class TQFilterObservableTest(TQPythonTest): """ Test the TQFilterObservable. """ def setUp(self): """ Create an external file with a single, empty tree and create tags and a sample using the external file. """ # create temporary directory super(TQFilterObservableTest, self).setUp() # create ROOT file and empty tree file = TFile( os.path.join(self.tempdir, "TQFilterObservable.root"), "recreate") tree = TTree("NOMINAL", "") tree.Write() file.Close() # create tags and sample self.tags = TQTaggable("a=2.2,b=3.3") self.tags.setTagBool("c", True) self.sample = TQSample("sample") self.sample.importTags(self.tags) self.sample.setTreeLocation( os.path.join(self.tempdir, "TQFilterObservable.root:NOMINAL")) def tearDown(self): # delete temporary directory super(TQFilterObservableTest, self).tearDown() def test_basic_retrieval(self): """ Test a TQFilterObservable can be created/retrieved via TQObservable. """ obs = TQObservable.getObservable("Filter($(a), $(b) > 3.)", self.tags) self.assertTrue(obs) def test_return_value(self): """ Test that the first argument is returned when the second argument is true. """ obs = TQObservable.getObservable("Filter($(a), $(b) > 3.)", self.tags) self.assertTrue(obs.initialize(self.sample)) self.assertEqual(obs.getNevaluations(), 1) self.assertEqual(obs.getValueAt(0), 2.2) def test_cut(self): """ Test that the observable does not return any value, when the second argument is false. """ obs = TQObservable.getObservable("Filter($(a), $(b) > 4.)", self.tags) self.assertTrue(obs.initialize(self.sample)) self.assertEqual(obs.getNevaluations(), 0) def test_multiple_retrieval(self): """ Test a TQFilterObservable can be created/retrieved via TQObservable and retrieved again with exactly the same expression. """ o1 = TQObservable.getObservable("Filter($(a), $(b) > 3.)", self.tags) self.assertTrue(o1) o2 = TQObservable.getObservable("Filter($(a), $(b) > 3.)", self.tags) self.assertTrue(o2) self.assertEqual(o1, o2) def test_multiple_retrieval_different_spaces(self): """ Test a TQFilterObservable can be created/retrieved via TQObservable and retrieved again with different number of spaces. """ o1 = TQObservable.getObservable("Filter($(a), [$(b)] > 3.)", self.tags) self.assertTrue(o1) o2 = TQObservable.getObservable("Filter($(a),[$(b)]> 3.)", self.tags) self.assertTrue(o2) self.assertEqual(o1, o2) def test_multiple_retrieval_with_bools(self): """ Test a TQFilterObservable can be created/retrieved via TQObservable and retrieved again with exactly the same expression when a boolean tag is used in the cut expression. """ o1 = TQObservable.getObservable("Filter($(a), $(b) > 3. && $(c))", self.tags) self.assertTrue(o1) o2 = TQObservable.getObservable("Filter($(a), $(b) > 3. && $(c))", self.tags) self.assertTrue(o2) self.assertEqual(o1, o2) def test_multiple_retrieval_with_bools_and_different_spaces(self): """ Test a TQFilterObservable can be created/retrieved via TQObservable and retrieved again with different usage of white spaces when a boolean tag is used in the cut expression. """ o1 = TQObservable.getObservable("Filter($(a), $(b) > 3. && $(c))", self.tags) self.assertTrue(o1) o2 = TQObservable.getObservable("Filter($(a),$(b)> 3. && $(c))", self.tags) self.assertTrue(o2) self.assertEqual(o1, o2)
class TQTreeFormulaObservableTest(TQPythonTest): """ Test the TQTreeFormulaObservable. """ def setUp(self): """ Create an external file with a tree (scalar and vector branch) and create tags and a sample using the external file. """ # create temporary directory super(TQTreeFormulaObservableTest, self).setUp() # create ROOT file and empty tree file = TFile( os.path.join(self.tempdir, "TQTreeFormulaObservable.root"), "recreate") tree = TTree("NOMINAL", "") x = array("d", [3.14]) tree.Branch("n_taus", x, "n_taus/D") vec = std_vector('double')() vec.push_back(1.42) vec.push_back(2.72) tree.Branch("tau_pt", vec) tree.Fill() x[0] = 42 vec.clear() vec.push_back(125.16) tree.Fill() tree.Write() file.Close() # create tags and sample self.tags = TQTaggable("a=n_taus,b=tau_pt") self.sample = TQSample("sample") self.sample.importTags(self.tags) self.sample = TQSample("sample") self.sample.setTreeLocation( os.path.join(self.tempdir, "TQTreeFormulaObservable.root:NOMINAL")) def tearDown(self): # delete temporary directory super(TQTreeFormulaObservableTest, self).tearDown() def test_basic_retrieval(self): """ Test a TQTreeFormulaObservable can be created/retrieved via TQObservable. """ # scalar obs = TQObservable.getObservable("n_taus", self.tags) self.assertTrue(obs) # vector obs = TQObservable.getObservable("VecBranch(tau_pt)", self.tags) self.assertTrue(obs) def test_observable_type_scalar(self): """ Test that the observable created from an expression with a scalar branch is a scalar observable. """ obs = TQObservable.getObservable("n_taus", self.tags) self.assertIsInstance(obs, TQTreeFormulaObservable) self.assertEqual(obs.getObservableType(), TQObservable.scalar) def test_observable_type_vector(self): """ Test that the observable created from an expression with a vector branch is a vector observable. """ obs = TQObservable.getObservable("VecBranch(tau_pt)", self.tags) self.assertIsInstance(obs, TQTreeFormulaObservable) self.assertEqual(obs.getObservableType(), TQObservable.vector) def test_observable_expr_scalar(self): """ Test that the observable created from an expression with a scalar branch returns the same expression again. """ obs = TQObservable.getObservable("n_taus", self.tags) self.assertEqual(obs.getExpression(), "n_taus") def test_observable_expr_vector(self): """ Test that the observable created from an expression with a vector branch returns the same expression again. """ obs = TQObservable.getObservable("VecBranch(tau_pt)", self.tags) self.assertEqual(obs.getExpression(), "VecBranch(tau_pt)") def test_return_value_scalar(self): """ Test that the observable created from a scalar branch returns the correct value. """ obs = TQObservable.getObservable("n_taus", self.tags) self.assertTrue(obs.initialize(self.sample)) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertEqual(obs.getNevaluations(), 1) self.assertAlmostEqual(obs.getValue(), 3.14) # These test fail. There seems to be an issue with PyROOT. Getting an # entry in python, does not notify the TTreeFormulas. # tree.GetEntry(1) # self.assertEqual(obs.getNevaluations(), 1) # self.assertAlmostEqual(obs.getValue(), 42) # is 3.14 def test_return_value_vector(self): """ Test that the observable created from a vector branch returns the correct value. """ obs = TQObservable.getObservable("VecBranch(tau_pt)", self.tags) self.assertTrue(obs.initialize(self.sample)) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertEqual(obs.getNevaluations(), 2) self.assertAlmostEqual(obs.getValueAt(0), 1.42) self.assertAlmostEqual(obs.getValueAt(1), 2.72) # These test fail. There seems to be an issue with PyROOT. Getting an # entry in python, does not notify the TTreeFormulas. # tree.GetEntry(1) # self.assertEqual(obs.getNevaluations(), 1) # is 2 # self.assertAlmostEqual(obs.getValueAt(0), 125.16) # is 3.14 def test_multiple_retrieval_vector(self): """ Test a TQTreeFormulaObservable can be created/retrieved via TQObservable and retrieved again with exactly the same expression. """ o1 = TQObservable.getObservable("VecBranch(tau_pt)", self.tags) self.assertTrue(o1) self.assertTrue(o1.initialize(self.sample)) o2 = TQObservable.getObservable("VecBranch(tau_pt)", self.tags) self.assertTrue(o2) self.assertTrue(o2.initialize(self.sample)) self.assertEqual(o1, o2) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertEqual(o1.getNevaluations(), 2) self.assertAlmostEqual(o1.getValueAt(0), 1.42) self.assertAlmostEqual(o1.getValueAt(1), 2.72) self.assertEqual(o2.getNevaluations(), 2) self.assertAlmostEqual(o2.getValueAt(0), 1.42) self.assertAlmostEqual(o2.getValueAt(1), 2.72) def test_multiple_retrieval_scalar(self): """ Test a TQTreeFormulaObservable can be created/retrieved via TQObservable and retrieved again with exactly the same expression. """ o1 = TQObservable.getObservable("n_taus", self.tags) self.assertTrue(o1) self.assertTrue(o1.initialize(self.sample)) o2 = TQObservable.getObservable("n_taus", self.tags) self.assertTrue(o2) self.assertTrue(o2.initialize(self.sample)) self.assertEqual(o1, o2) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertEqual(o2.getNevaluations(), 1) self.assertAlmostEqual(o2.getValue(), 3.14) self.assertEqual(o1.getNevaluations(), 1) self.assertAlmostEqual(o1.getValue(), 3.14) def test_return_value_vector_at(self): """ Test the VecAT observable works with VecBranch. """ obs = TQObservable.getObservable("VecAT(VecBranch(tau_pt), 1)", self.tags) self.assertTrue(obs.initialize(self.sample)) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertAlmostEqual(obs.getValue(), 2.72) def test_return_value_vector_at_by_10_inside_VecBranch(self): """ Test the VecAT observable works with VecBranch, when the branch is divided by 10. """ obs = TQObservable.getObservable("VecAT(VecBranch(tau_pt / 10), 1)", self.tags) self.assertTrue(obs.initialize(self.sample)) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertAlmostEqual(obs.getValue(), 0.272) def test_return_value_vector_at_by_10_inside_VecAT(self): """ Test the VecAT observable works with VecBranch, when the vector observable is divided by 10. """ obs = TQObservable.getObservable("VecAT([VecBranch(tau_pt)] / 10, 1)", self.tags) self.assertTrue(obs.initialize(self.sample)) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertAlmostEqual(obs.getValue(), 0.272) def test_return_value_vector_at_by_10_outside(self): """ Test the VecAT observable works with VecBranch, when VecAt is divided by 10. """ obs = TQObservable.getObservable("[VecAT(VecBranch(tau_pt), 1)] / 10", self.tags) self.assertTrue(obs.initialize(self.sample)) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertAlmostEqual(obs.getValue(), 0.272) def test_return_value_scalar_tags(self): """ Test that the observable created from a scalar branch using tags returns the correct value. """ obs = TQObservable.getObservable("$(a)", self.tags) self.assertTrue(obs.initialize(self.sample)) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertEqual(obs.getNevaluations(), 1) self.assertAlmostEqual(obs.getValue(), 3.14) # These test fail. There seems to be an issue with PyROOT. Getting an # entry in python, does not notify the TTreeFormulas. # tree.GetEntry(1) # self.assertEqual(obs.getNevaluations(), 1) # self.assertAlmostEqual(obs.getValue(), 42) # is 3.14 def test_return_value_vector_tags(self): """ Test that the observable created from a vector branch using tags returns the correct value. """ obs = TQObservable.getObservable("VecBranch($(b))", self.tags) self.assertTrue(obs.initialize(self.sample)) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertEqual(obs.getNevaluations(), 2) self.assertAlmostEqual(obs.getValueAt(0), 1.42) self.assertAlmostEqual(obs.getValueAt(1), 2.72) def test_multiple_retrieval_vector_tags(self): """ Test a TQTreeFormulaObservable can be created/retrieved via TQObservable and retrieved again with exactly the same expression when tags are involved. """ o1 = TQObservable.getObservable("VecBranch($(b))", self.tags) self.assertTrue(o1) self.assertTrue(o1.initialize(self.sample)) o2 = TQObservable.getObservable("VecBranch($(b))", self.tags) self.assertTrue(o2) self.assertTrue(o2.initialize(self.sample)) o3 = TQObservable.getObservable("VecBranch(tau_pt)", self.tags) self.assertTrue(o3) self.assertTrue(o3.initialize(self.sample)) self.assertEqual(o1, o2) self.assertEqual(o1, o3) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertEqual(o1.getNevaluations(), 2) self.assertAlmostEqual(o1.getValueAt(0), 1.42) self.assertAlmostEqual(o1.getValueAt(1), 2.72) self.assertEqual(o2.getNevaluations(), 2) self.assertAlmostEqual(o2.getValueAt(0), 1.42) self.assertAlmostEqual(o2.getValueAt(1), 2.72) self.assertEqual(o3.getNevaluations(), 2) self.assertAlmostEqual(o3.getValueAt(0), 1.42) self.assertAlmostEqual(o3.getValueAt(1), 2.72) def test_multiple_retrieval_scalar_tags(self): """ Test a TQTreeFormulaObservable can be created/retrieved via TQObservable and retrieved again with exactly the same expression when tags are involved. """ o1 = TQObservable.getObservable("$(a)", self.tags) self.assertTrue(o1) self.assertTrue(o1.initialize(self.sample)) o2 = TQObservable.getObservable("$(a)", self.tags) self.assertTrue(o2) self.assertTrue(o2.initialize(self.sample)) o3 = TQObservable.getObservable("n_taus", self.tags) self.assertTrue(o3) self.assertTrue(o3.initialize(self.sample)) self.assertEqual(o1, o2) self.assertEqual(o1, o3) tree = self.sample.getTreeToken().getContentAsTObject() tree.GetEntry(0) self.assertEqual(o2.getNevaluations(), 1) self.assertAlmostEqual(o2.getValue(), 3.14) self.assertEqual(o1.getNevaluations(), 1) self.assertAlmostEqual(o1.getValue(), 3.14) self.assertEqual(o2.getNevaluations(), 1) self.assertAlmostEqual(o2.getValue(), 3.14)
def test_merge_sample_sum(self): """ Merge two samples with the sum option true. In this case time samples do no play any role. """ this = TQSampleFolder("this") s1 = TQSample("htautau") s1.addObject(TQCounter("c", 1.234, 35.1, 1234)) s1.setTag("test.s1", "hello world") this.addSampleFolder(s1) other = TQSampleFolder("other") s2 = TQSample("htautau") s2.addObject(TQCounter("c", 4.321, 65.7, 4321)) s2.setTag("test.s2", "hello multiverse") other.addSampleFolder(s2) this.merge(other, "asv", True) S = this.getSample("htautau") self.assertTrue(S) self.assertIsInstance(S, TQSample) self.assertEqual( repr(S), 'TQSample("htautau") @ this:/htautau test.s1 = "hello world", test.s2 = "hello multiverse"' ) C = S.getObject("c") self.assertTrue(C) self.assertIsInstance(C, TQCounter) self.assertEqual(C.getCounter(), 5.555) self.assertEqual(C.getRawCounter(), 5555) self.assertEqual(C.getError(), 74.48825410761083)
def test_merge_sample_nosum(self): """ Merge two samples without the sum option, this means merging should not take place at all, since there are no timestamps. """ this = TQSampleFolder("this") s1 = TQSample("htautau") s1.addObject(TQCounter("c", 1.234, 35.1, 1234)) s1.setTag("test.s1", "hello world") this.addSampleFolder(s1) other = TQSampleFolder("other") s2 = TQSample("htautau") s2.addObject(TQCounter("c", 4.321, 65.7, 4321)) s2.setTag("test.s2", "hello multiverse") other.addSampleFolder(s2) this.merge(other, False) S = this.getSample("htautau") self.assertTrue(S) self.assertIsInstance(S, TQSample) C = S.getObject("c") self.assertTrue(C) self.assertIsInstance(C, TQCounter) self.assertEqual(C.getCounter(), 1.234) self.assertEqual(C.getRawCounter(), 1234) self.assertEqual(C.getError(), 35.1)
def test_merge_sample_other_newer_nosum(self): """ Merge two samples without the sum option, but the other sample folder is newer. This means this one should be taken. """ this = TQSampleFolder("this") s1 = TQSample("htautau") s1.addObject(TQCounter("c", 1.234, 35.1, 1234)) s1.setTag("test.s1", "hello world") s1.setTag(".test.timestamp.machine", self.YESTERDAY) this.addSampleFolder(s1) other = TQSampleFolder("other") s2 = TQSample("htautau") s2.addObject(TQCounter("c", 4.321, 65.7, 4321)) s2.setTag("test.s2", "hello multiverse") s2.setTag(".test.timestamp.machine", self.TODAY) other.addSampleFolder(s2) this.merge(other, "test", False) S = this.getSample("htautau") self.assertTrue(S) self.assertIsInstance(S, TQSample) C = S.getObject("c") self.assertTrue(C) self.assertIsInstance(C, TQCounter) self.assertEqual(C.getCounter(), 4.321) self.assertEqual(C.getRawCounter(), 4321) self.assertEqual(C.getError(), 65.7)