コード例 #1
0
    def test_tough_test_case(self):  # test crazy uncorrelated data
        #         raise SkipTest
        event_numbers = np.array([0, 0, 2, 2, 3, 3, 3, 4, 4, 4, 6, 6, 7, 7, 8, 8, 9, 10], dtype=np.int64)
        ref_column = np.array([1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20], dtype=np.double)
        ref_row = ref_column
        column = np.array([11, 11, 0, 2, 5, 5, 5, 3, 0, 4, 9, 10, 12, 12, 13, 14, 15, 17], dtype=np.double)
        row = column
        ref_charge = np.zeros_like(ref_row, dtype=np.uint16)
        charge = np.zeros_like(ref_charge)

        corr, n_fixes = analysis_utils.fix_event_alignment(event_numbers, ref_column, column, ref_row, row, ref_charge, charge, error=0.1, n_bad_events=2, n_good_events=2, correlation_search_range=100, good_events_search_range=100)

        # one fix are expected
        self.assertEqual(n_fixes, 1)

        # Correlation flag check
        self.assertTrue(np.all(corr[:16] == 1))
        self.assertTrue(np.all(corr[17:] == 0))

        # Similarity check
        self.assertTrue(np.all(column == np.array([2, 0, 3, 4, 0, 0, 0, 9, 10, 0, 13, 14, 15, 0, 17, 0, 0, 0])))
        self.assertTrue(np.all(column == row))

        # Small but important change of test case, event 4 is copied to 2 and their are too many hits in 4 -> correlation has to be 0
        event_numbers = np.array([0, 0, 2, 2, 3, 3, 3, 4, 4, 4, 6, 6, 7, 7, 8, 8, 9, 10], dtype=np.int64)
        ref_column = np.array([1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20], dtype=np.double)
        ref_row = ref_column
        column = np.array([11, 11, 0, 2, 5, 5, 5, 3, 3, 4, 9, 10, 12, 12, 13, 14, 15, 17], dtype=np.double)
        row = column
        ref_charge = np.zeros_like(ref_row, dtype=np.uint16)
        charge = np.zeros_like(ref_charge)

        corr, n_fixes = analysis_utils.fix_event_alignment(event_numbers, ref_column, column, ref_row, row, ref_charge, charge, error=0.1, n_bad_events=3, n_good_events=2, correlation_search_range=100, good_events_search_range=100)

        # one fix are expected
        self.assertEqual(n_fixes, 1)

        # Correlation flag check
        self.assertTrue(np.all(corr[0:2] == 1))
        self.assertTrue(np.all(corr[2:4] == 0))
        self.assertTrue(np.all(corr[4:16] == 1))
        self.assertTrue(np.all(corr[17:] == 0))

        # Similarity check
        self.assertTrue(np.all(column == np.array([2, 0, 3, 3, 0, 0, 0, 9, 10, 0, 13, 14, 15, 0, 17, 0, 0, 0])))
        self.assertTrue(np.all(column == row))
コード例 #2
0
    def test_missing_data(self):  # check behavior with missing data, but correlation
        event_numbers, ref_column, column, ref_row, row, ref_charge, charge, _ = get_random_data(50)

        # Create no hits (virtual hits) in DUT 1
        column[5:15] = 0
        row[5:15] = 0

        corr, n_fixes = analysis_utils.fix_event_alignment(event_numbers, ref_column, column, ref_row, row, ref_charge, charge, error=0.1, n_bad_events=3, n_good_events=3, correlation_search_range=100, good_events_search_range=100)

        # Check that no fixes where done
        self.assertEqual(n_fixes, 0)

        # Correlation flag check
        self.assertTrue(np.all(corr[:6] == 1))
        self.assertTrue(np.all(corr[6:14] == 0))
        self.assertTrue(np.all(corr[14:] == 1))

        # Data is the same where there are hits and correlation flag is set
        self.assertTrue(np.all(ref_column[np.logical_and(corr == 1, column != 0)] == column[np.logical_and(corr == 1, column != 0)]))
        self.assertTrue(np.all(row[np.logical_and(corr == 1, column != 0)] == ref_row[np.logical_and(corr == 1, column != 0)]))
        self.assertTrue(np.all(charge[np.logical_and(corr == 1, column != 0)] == ref_charge[np.logical_and(corr == 1, column != 0)]))
コード例 #3
0
    def test_fix_event_alignment(self):  # check with multiple jumps data
        event_numbers, ref_column, column, ref_row, row, ref_charge, charge, _ = get_random_data(50)
        column, row, charge = np.zeros_like(column), np.zeros_like(row), np.zeros_like(charge)
        # Create not correlated events
        column[10:] = ref_column[0:-10]
        row[10:] = ref_row[0:-10]
        charge[10:] = ref_charge[0:-10]
        column[20:] = ref_column[20:]
        row[20:] = ref_row[20:]
        charge[20:] = ref_charge[20:]
        row[10] = 3.14159
        column[10] = 3.14159
        charge[10] = 3

        corr, n_fixes = analysis_utils.fix_event_alignment(event_numbers, ref_column, column, ref_row, row, ref_charge, charge, error=0.1, n_bad_events=3, n_good_events=3, correlation_search_range=100, good_events_search_range=100)

        # Check fixes counter
        self.assertEqual(n_fixes, 1)

        # Correlation flag check
        self.assertTrue(np.all(corr[0:10] == 1))
        self.assertTrue(np.all(corr[20:] == 1))

        # The data is correlated here
        self.assertTrue(np.all(ref_column[1:10] == column[1:10]))
        self.assertTrue(np.all(ref_row[1:10] == row[1:10]))
        self.assertTrue(np.all(ref_charge[1:10] == charge[1:10]))
        self.assertTrue(np.all(ref_column[20:] == column[20:]))
        self.assertTrue(np.all(ref_row[20:] == row[20:]))
        self.assertTrue(np.all(ref_charge[20:] == charge[20:]))

        # Shifted data has to leave zeroes
        self.assertEqual(column[0], 3.14159)
        self.assertEqual(row[0], 3.14159)
        self.assertEqual(charge[0], 3)
        self.assertTrue(np.all(row[10:20] == 0))
        self.assertTrue(np.all(column[10:20] == 0))
        self.assertTrue(np.all(charge[10:20] == 0))