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