Ejemplo n.º 1
0
    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"))
Ejemplo n.º 2
0
	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"))
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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)