GCC Code Coverage Report


Directory: ./
File: examples/iguana_ex_cpp_config_files.cc
Date: 2025-11-25 17:57:04
Coverage Exec Excl Total
Lines: 97.9% 46 0 47
Functions: 100.0% 1 0 1
Branches: 49.4% 78 0 158

Line Branch Exec Source
1 #include <cassert>
2 #include <iguana/algorithms/clas12/ZVertexFilter/Algorithm.h>
3
4 /// @begin_doc_example{cpp}
5 /// @file iguana_ex_cpp_config_files.cc
6 /// @brief Example showing how to control algorithm configuration.
7 ///
8 /// Examples include:
9 /// - hard-coding a configuration setting override
10 /// - using a configuration file
11 /// - using a directory of configuration files
12 ///
13 /// @par Usage
14 /// ```bash
15 /// iguana_ex_cpp_config_files [CONFIG_FILE_DIRECTORY]
16 ///
17 /// CONFIG_FILE_DIRECTORY a custom directory with config files
18 /// (default = an example directory)
19 /// ```
20 /// @end_doc_example
21
22 /// main function
23
1/2
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 11 not taken.
1 int main(int argc, char** argv)
24 {
25
26 // parse arguments
27 std::string configDir;
28
1/2
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 11 not taken.
1 if(argc > 1)
29
1/2
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 312 not taken.
2 configDir = std::string(argv[1]);
30 else
31 configDir = iguana::ConfigFileReader::GetConfigInstallationPrefix() + "/examples";
32 1 fmt::print("Using top-level configuration directory {}\n", configDir);
33
34 // loop over multiple examples how to use configuration files and set options
35
2/2
✓ Branch 199 → 30 taken 6 times.
✓ Branch 199 → 200 taken 1 time.
7 for(int example = 1; example <= 6; example++) {
36
3/8
✗ Branch 31 → 32 not taken.
✓ Branch 31 → 33 taken 6 times.
✓ Branch 33 → 34 taken 6 times.
✗ Branch 33 → 230 not taken.
✗ Branch 41 → 42 not taken.
✓ Branch 41 → 44 taken 6 times.
✗ Branch 312 → 313 not taken.
✗ Branch 312 → 315 not taken.
12 fmt::print("\n" + iguana::Logger::Header(fmt::format("CONFIG EXAMPLE {}", example)) + "\n");
37
38 // start the algorithm; it will be destroyed at the end of each `example` iteration
39
1/2
✓ Branch 61 → 62 taken 6 times.
✗ Branch 61 → 312 not taken.
6 auto algo = std::make_unique<iguana::clas12::ZVertexFilter>();
40
1/2
✓ Branch 62 → 63 taken 6 times.
✗ Branch 62 → 308 not taken.
6 algo->SetLogLevel("debug");
41
42
6/6
✓ Branch 63 → 64 taken 1 time.
✓ Branch 63 → 81 taken 1 time.
✓ Branch 63 → 98 taken 1 time.
✓ Branch 63 → 122 taken 1 time.
✓ Branch 63 → 147 taken 1 time.
✓ Branch 63 → 171 taken 1 time.
6 switch(example) {
43
44 case 1: {
45 // Use the default configuration, from `../src/iguana/algorithms/clas12/ZVertexFilter.yaml`
46
1/2
✓ Branch 64 → 65 taken 1 time.
✗ Branch 64 → 308 not taken.
1 algo->Start();
47
1/2
✓ Branch 65 → 66 taken 1 time.
✗ Branch 65 → 308 not taken.
1 auto key = algo->PrepareEvent(4800); // sets the run number and loads the cuts
48
2/4
✓ Branch 66 → 67 taken 1 time.
✗ Branch 66 → 308 not taken.
✗ Branch 67 → 68 not taken.
✓ Branch 67 → 69 taken 1 time.
1 assert((algo->GetRunNum(key) == 4800)); // pass the key into the 'Get*' methods
49
7/18
✓ Branch 69 → 70 taken 1 time.
✗ Branch 69 → 308 not taken.
✓ Branch 70 → 71 taken 1 time.
✗ Branch 70 → 240 not taken.
✓ Branch 71 → 72 taken 1 time.
✗ Branch 71 → 240 not taken.
✓ Branch 72 → 73 taken 1 time.
✗ Branch 72 → 236 not taken.
✓ Branch 73 → 74 taken 1 time.
✗ Branch 73 → 236 not taken.
✓ Branch 74 → 75 taken 1 time.
✗ Branch 74 → 77 not taken.
✓ Branch 77 → 78 taken 1 time.
✗ Branch 77 → 80 not taken.
✗ Branch 236 → 237 not taken.
✗ Branch 236 → 239 not taken.
✗ Branch 240 → 241 not taken.
✗ Branch 240 → 243 not taken.
2 fmt::println("Z-vertex cuts: {} to {}", algo->GetElectronZcuts(key).at(0), algo->GetElectronZcuts(key).at(1));
50 1 break;
51 }
52
53 case 2: {
54 // Use `SetElectronZcuts` to set the cuts
55 // - note that this will OVERRIDE any value used in any configuration file
56 // - only use `SetElectronZcuts` if for any reason you want to hard-code a specific value; usage
57 // of configuration files is preferred in general
58
1/2
✓ Branch 81 → 82 taken 1 time.
✗ Branch 81 → 308 not taken.
1 algo->Start();
59 iguana::concurrent_key_t const key = 0; // need the same key in `SetElectronZcuts` and `GetElectronZcuts`
60
1/2
✓ Branch 82 → 83 taken 1 time.
✗ Branch 82 → 308 not taken.
1 algo->SetElectronZcuts(-5.0, 3.0, key);
61
3/6
✓ Branch 83 → 84 taken 1 time.
✗ Branch 83 → 308 not taken.
✓ Branch 84 → 85 taken 1 time.
✗ Branch 84 → 244 not taken.
✗ Branch 85 → 86 not taken.
✓ Branch 85 → 87 taken 1 time.
1 assert((algo->GetElectronZcuts(key).at(0) == -5.0));
62
3/6
✓ Branch 90 → 91 taken 1 time.
✗ Branch 90 → 308 not taken.
✓ Branch 91 → 92 taken 1 time.
✗ Branch 91 → 248 not taken.
✗ Branch 92 → 93 not taken.
✓ Branch 92 → 94 taken 1 time.
1 assert((algo->GetElectronZcuts(key).at(1) == 3.0));
63 1 break;
64 }
65
66 case 3: {
67 // Use a specific configuration file
68
2/4
✓ Branch 98 → 99 taken 1 time.
✗ Branch 98 → 308 not taken.
✓ Branch 99 → 100 taken 1 time.
✗ Branch 99 → 252 not taken.
1 algo->SetConfigFile(configDir + "/my_z_vertex_cuts.yaml");
69
1/2
✓ Branch 105 → 106 taken 1 time.
✗ Branch 105 → 308 not taken.
1 algo->Start();
70
1/2
✓ Branch 106 → 107 taken 1 time.
✗ Branch 106 → 308 not taken.
1 auto key = algo->PrepareEvent(5500);
71
3/6
✓ Branch 107 → 108 taken 1 time.
✗ Branch 107 → 308 not taken.
✓ Branch 108 → 109 taken 1 time.
✗ Branch 108 → 258 not taken.
✗ Branch 109 → 110 not taken.
✓ Branch 109 → 111 taken 1 time.
1 assert((algo->GetElectronZcuts(key).at(0) == -0.8));
72
3/6
✓ Branch 114 → 115 taken 1 time.
✗ Branch 114 → 308 not taken.
✓ Branch 115 → 116 taken 1 time.
✗ Branch 115 → 262 not taken.
✗ Branch 116 → 117 not taken.
✓ Branch 116 → 118 taken 1 time.
1 assert((algo->GetElectronZcuts(key).at(1) == 0.7));
73 1 break;
74 }
75
76 case 4: {
77 // Use the same specific configuration file, but don't set a run number;
78 // note also the usage of `SetConfigDirectory`, as another example how to set a specific configuration file
79
1/2
✓ Branch 122 → 123 taken 1 time.
✗ Branch 122 → 308 not taken.
1 algo->SetConfigDirectory(configDir);
80
2/4
✓ Branch 123 → 124 taken 1 time.
✗ Branch 123 → 308 not taken.
✓ Branch 124 → 125 taken 1 time.
✗ Branch 124 → 266 not taken.
1 algo->SetConfigFile("my_z_vertex_cuts.yaml");
81
1/2
✓ Branch 130 → 131 taken 1 time.
✗ Branch 130 → 308 not taken.
1 algo->Start();
82
1/2
✓ Branch 131 → 132 taken 1 time.
✗ Branch 131 → 308 not taken.
1 auto key = algo->PrepareEvent(0); // run number "0" means "no run number"
83
3/6
✓ Branch 132 → 133 taken 1 time.
✗ Branch 132 → 308 not taken.
✓ Branch 133 → 134 taken 1 time.
✗ Branch 133 → 272 not taken.
✗ Branch 134 → 135 not taken.
✓ Branch 134 → 136 taken 1 time.
1 assert((algo->GetElectronZcuts(key).at(0) == -1.5));
84
3/6
✓ Branch 139 → 140 taken 1 time.
✗ Branch 139 → 308 not taken.
✓ Branch 140 → 141 taken 1 time.
✗ Branch 140 → 276 not taken.
✗ Branch 141 → 142 not taken.
✓ Branch 141 → 143 taken 1 time.
1 assert((algo->GetElectronZcuts(key).at(1) == 1.3));
85 1 break;
86 }
87
88 case 5: {
89 // Use a custom directory of configuration files; if a configuration file within
90 // has the same path and name as the default (`ZVertexFilter.yaml`), it will be used instead of the default.
91 // This is designed such that if you copy the full installed configuration directory to a new location, you
92 // may use that directory instead of the default, and modify any configuration file within.
93
2/4
✓ Branch 147 → 148 taken 1 time.
✗ Branch 147 → 308 not taken.
✓ Branch 148 → 149 taken 1 time.
✗ Branch 148 → 280 not taken.
1 algo->SetConfigDirectory(configDir + "/my_config_directory");
94
1/2
✓ Branch 154 → 155 taken 1 time.
✗ Branch 154 → 308 not taken.
1 algo->Start();
95
1/2
✓ Branch 155 → 156 taken 1 time.
✗ Branch 155 → 308 not taken.
1 auto key = algo->PrepareEvent(0); // run number "0" means "no run number"
96
3/6
✓ Branch 156 → 157 taken 1 time.
✗ Branch 156 → 308 not taken.
✓ Branch 157 → 158 taken 1 time.
✗ Branch 157 → 286 not taken.
✗ Branch 158 → 159 not taken.
✓ Branch 158 → 160 taken 1 time.
1 assert((algo->GetElectronZcuts(key).at(0) == -15.0));
97
3/6
✓ Branch 163 → 164 taken 1 time.
✗ Branch 163 → 308 not taken.
✓ Branch 164 → 165 taken 1 time.
✗ Branch 164 → 290 not taken.
✗ Branch 165 → 166 not taken.
✓ Branch 165 → 167 taken 1 time.
1 assert((algo->GetElectronZcuts(key).at(1) == 15.0));
98 1 break;
99 }
100
101 case 6: {
102 // Use a single, combined configuration file; each algorithm's options are in a separate section
103
1/2
✓ Branch 171 → 172 taken 1 time.
✗ Branch 171 → 308 not taken.
1 algo->SetConfigDirectory(configDir);
104
2/4
✓ Branch 172 → 173 taken 1 time.
✗ Branch 172 → 308 not taken.
✓ Branch 173 → 174 taken 1 time.
✗ Branch 173 → 294 not taken.
1 algo->SetConfigFile("my_combined_config_file.yaml");
105
1/2
✓ Branch 179 → 180 taken 1 time.
✗ Branch 179 → 308 not taken.
1 algo->Start();
106
1/2
✓ Branch 180 → 181 taken 1 time.
✗ Branch 180 → 308 not taken.
1 auto key = algo->PrepareEvent(0); // run number "0" means "no run number"
107
3/6
✓ Branch 181 → 182 taken 1 time.
✗ Branch 181 → 308 not taken.
✓ Branch 182 → 183 taken 1 time.
✗ Branch 182 → 300 not taken.
✗ Branch 183 → 184 not taken.
✓ Branch 183 → 185 taken 1 time.
1 assert((algo->GetElectronZcuts(key).at(0) == -33.0));
108
3/8
✓ Branch 188 → 189 taken 1 time.
✗ Branch 188 → 308 not taken.
✓ Branch 189 → 190 taken 1 time.
✗ Branch 189 → 304 not taken.
✗ Branch 190 → 191 not taken.
✓ Branch 190 → 192 taken 1 time.
✗ Branch 308 → 309 not taken.
✗ Branch 308 → 311 not taken.
1 assert((algo->GetElectronZcuts(key).at(1) == 11.0));
109 1 break;
110 }
111
112 default: {
113 fmt::print(stderr, "ERROR: unknown example number '{}'\n", example);
114 return 1;
115 }
116 }
117
118
1/2
✓ Branch 196 → 197 taken 6 times.
✗ Branch 196 → 308 not taken.
6 algo->Stop();
119 }
120
121 return 0;
122 }
123