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))
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)]))
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))