Belle II Software  release-05-01-25
finalTriggerDecisionCalculator.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2SoftwareTriggerCutResult::c_noResultSoftwareTriggerCutResult::c_accept6 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Nils Braun *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <hlt/softwaretrigger/core/FinalTriggerDecisionCalculator.h>
12 #include <mdst/dataobjects/SoftwareTriggerResult.h>
13 #include <hlt/softwaretrigger/core/SoftwareTriggerDBHandler.h>
14 #include <gtest/gtest.h>
15 
16 using namespace std;
17 
18 namespace Belle2 {
23  namespace SoftwareTrigger {
25  TEST(FinalTriggerDecisionCalculatorTest, basic)
26  {
27  SoftwareTriggerResult result;
28 
29  // No results stored
30  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, FinalTriggerDecisionCalculator::getModuleResult(result, "test", true));
31  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, FinalTriggerDecisionCalculator::getModuleResult(result, "test", false));
32 
33  // First result: an accept result
34  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutOne"), SoftwareTriggerCutResult::c_accept);
35 
36  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, result.getResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutOne")));
37  EXPECT_THROW(result.getResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutTwo")), std::out_of_range);
38 
39  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, FinalTriggerDecisionCalculator::getModuleResult(result, "test", true));
40  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, FinalTriggerDecisionCalculator::getModuleResult(result, "test", false));
41 
42  // Another first result: a reject result
43  result.clear();
44  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutOne"), SoftwareTriggerCutResult::c_reject);
45 
46  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, result.getResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutOne")));
47  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, FinalTriggerDecisionCalculator::getModuleResult(result, "test", true));
48  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, FinalTriggerDecisionCalculator::getModuleResult(result, "test", false));
49 
50  // Another first result: a don't know result
51  result.clear();
52  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutOne"), SoftwareTriggerCutResult::c_noResult);
53 
54  EXPECT_EQ(SoftwareTriggerCutResult::c_noResult, result.getResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutOne")));
55  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, FinalTriggerDecisionCalculator::getModuleResult(result, "test", true));
56  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, FinalTriggerDecisionCalculator::getModuleResult(result, "test", false));
57 
58  // Add an unrelated result: should not change anything
59  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("other_test", "cutOne"), SoftwareTriggerCutResult::c_accept);
60 
61  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, result.getResult(SoftwareTriggerDBHandler::makeFullCutName("other_test", "cutOne")));
62 
63  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, FinalTriggerDecisionCalculator::getModuleResult(result, "test", true));
64  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, FinalTriggerDecisionCalculator::getModuleResult(result, "test", false));
65 
66  // Three result
67  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutOne"), SoftwareTriggerCutResult::c_accept);
68  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutTwo"), SoftwareTriggerCutResult::c_noResult);
69  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutThree"), SoftwareTriggerCutResult::c_reject);
70 
71  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, result.getResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutOne")));
72  EXPECT_EQ(SoftwareTriggerCutResult::c_noResult, result.getResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutTwo")));
73  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, result.getResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutThree")));
74 
75  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, FinalTriggerDecisionCalculator::getModuleResult(result, "test", true));
76  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, FinalTriggerDecisionCalculator::getModuleResult(result, "test", false));
77 
78  // Add another accept result: should not change anything
79  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutFour"), SoftwareTriggerCutResult::c_accept);
80 
81  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, FinalTriggerDecisionCalculator::getModuleResult(result, "test", true));
82  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, FinalTriggerDecisionCalculator::getModuleResult(result, "test", false));
83 
84  // More accept than reject: should be the same
85  result.clear();
86  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutOne"), SoftwareTriggerCutResult::c_accept);
87  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutTwo"), SoftwareTriggerCutResult::c_accept);
88  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutThree"), SoftwareTriggerCutResult::c_reject);
89 
90  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, FinalTriggerDecisionCalculator::getModuleResult(result, "test", true));
91  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, FinalTriggerDecisionCalculator::getModuleResult(result, "test", false));
92 
93  // More reject than accept: should be the same
94  result.clear();
95  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutOne"), SoftwareTriggerCutResult::c_reject);
96  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutTwo"), SoftwareTriggerCutResult::c_accept);
97  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutThree"), SoftwareTriggerCutResult::c_reject);
98 
99  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, FinalTriggerDecisionCalculator::getModuleResult(result, "test", true));
100  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, FinalTriggerDecisionCalculator::getModuleResult(result, "test", false));
101 
102  // Add two other accept result: should not change anything
103  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutSix"), SoftwareTriggerCutResult::c_accept);
104  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("test", "cutSeven"), SoftwareTriggerCutResult::c_accept);
105 
106  EXPECT_EQ(SoftwareTriggerCutResult::c_accept, FinalTriggerDecisionCalculator::getModuleResult(result, "test", true));
107  EXPECT_EQ(SoftwareTriggerCutResult::c_reject, FinalTriggerDecisionCalculator::getModuleResult(result, "test", false));
108  }
109 
111  TEST(FinalTriggerDecisionCalculatorTest, result)
112  {
113  SoftwareTriggerResult result;
114 
115  // No results stored -> ne event is accepted.
116  EXPECT_EQ(true, FinalTriggerDecisionCalculator::getFinalTriggerDecision(result));
117 
118  // No total results should not change anything.
119  result.addResult(SoftwareTriggerDBHandler::makeFullCutName("filter", "some_cut"), SoftwareTriggerCutResult::c_reject);
120  EXPECT_EQ(true, FinalTriggerDecisionCalculator::getFinalTriggerDecision(result));
121 
122  // Revision 2
123  // filter has rejected -> reject
124  result.clear();
125  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("filter"), SoftwareTriggerCutResult::c_reject);
126  EXPECT_EQ(false, FinalTriggerDecisionCalculator::getFinalTriggerDecision(result));
127 
128  // filter has accepted and skim also -> accept
129  result.clear();
130  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("filter"), SoftwareTriggerCutResult::c_accept);
131  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("skim"), SoftwareTriggerCutResult::c_accept);
132  EXPECT_EQ(true, FinalTriggerDecisionCalculator::getFinalTriggerDecision(result));
133 
134  // filter has rejected and skim should not change anything -> reject
135  result.clear();
136  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("filter"), SoftwareTriggerCutResult::c_reject);
137  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("skim"), SoftwareTriggerCutResult::c_accept);
138  EXPECT_EQ(false, FinalTriggerDecisionCalculator::getFinalTriggerDecision(result));
139 
140  // filter has accepted, skim does not matter -> accept
141  result.clear();
142  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("filter"), SoftwareTriggerCutResult::c_accept);
143  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("skim"), SoftwareTriggerCutResult::c_reject);
144  EXPECT_EQ(true, FinalTriggerDecisionCalculator::getFinalTriggerDecision(result));
145 
146  // Revision 1
147  // fast reco has rejected -> reject
148  result.clear();
149  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("fast_reco"), SoftwareTriggerCutResult::c_reject);
150  EXPECT_EQ(false, FinalTriggerDecisionCalculator::getFinalTriggerDecision(result));
151 
152  // fast reco has accepted and hlt also -> accept
153  result.clear();
154  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("fast_reco"), SoftwareTriggerCutResult::c_accept);
155  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("hlt"), SoftwareTriggerCutResult::c_accept);
156  EXPECT_EQ(true, FinalTriggerDecisionCalculator::getFinalTriggerDecision(result));
157 
158  // fast reco has rejected and hlt should not change anything -> reject
159  result.clear();
160  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("fast_reco"), SoftwareTriggerCutResult::c_reject);
161  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("hlt"), SoftwareTriggerCutResult::c_accept);
162  EXPECT_EQ(false, FinalTriggerDecisionCalculator::getFinalTriggerDecision(result));
163 
164  // fast reco and hlt have accepted, calib does not matter -> accept
165  result.clear();
166  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("fast_reco"), SoftwareTriggerCutResult::c_accept);
167  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("hlt"), SoftwareTriggerCutResult::c_accept);
168  result.addResult(SoftwareTriggerDBHandler::makeTotalResultName("calib"), SoftwareTriggerCutResult::c_reject);
169 
170  }
171  }
173 }
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TEST
TEST(TestgetDetectorRegion, TestgetDetectorRegion)
Test Constructors.
Definition: utilityFunctions.cc:18