| 1 | // %%%%%%%%%%%%%
|
|---|
| 2 | // gemc headers
|
|---|
| 3 | // %%%%%%%%%%%%%
|
|---|
| 4 | #include "usage.h"
|
|---|
| 5 |
|
|---|
| 6 | // %%%%%%%%%%%
|
|---|
| 7 | // C++ headers
|
|---|
| 8 | // %%%%%%%%%%%
|
|---|
| 9 | #include <cstdio>
|
|---|
| 10 | #include <set>
|
|---|
| 11 | #include <cstdlib>
|
|---|
| 12 |
|
|---|
| 13 | gemc_opts::gemc_opts()
|
|---|
| 14 | {
|
|---|
| 15 | // #########
|
|---|
| 16 | // Generator
|
|---|
| 17 | // #########
|
|---|
| 18 |
|
|---|
| 19 | args["BEAM_P"].args = "e-, 11*GeV, 0*deg, 0*deg";
|
|---|
| 20 | args["BEAM_P"].help = "Beam particle, momentum, angles (in respect of z-axis). \n";
|
|---|
| 21 | args["BEAM_P"].help += " Example: -BEAM_P=\"e-, 6*GeV, 15*deg, 20*deg\" sets 6 GeV electrons 15 degrees in theta, 20 degrees in phi. \n";
|
|---|
| 22 | args["BEAM_P"].help += " Use -BEAM_P=\"show_all\" to print the list of G4 supported particles.\n";
|
|---|
| 23 | args["BEAM_P"].name = "Beam particle, Energy, Theta, Phi";
|
|---|
| 24 | args["BEAM_P"].type = 1;
|
|---|
| 25 | args["BEAM_P"].ctgr = "generator";
|
|---|
| 26 |
|
|---|
| 27 | args["SPREAD_P"].args = "0*GeV, 0*deg, 0*deg";
|
|---|
| 28 | args["SPREAD_P"].help = "Spread beam energy and angles (in respect of z-axis). \n";
|
|---|
| 29 | args["SPREAD_P"].help += " Example: -SPREAD_P=\"0*GeV, 10*deg, 20*deg\" spreads 10 degrees in theta, 20 degrees in phi. \n";
|
|---|
| 30 | args["SPREAD_P"].name = "delta_Energy, delta_Theta, delta_phi";
|
|---|
| 31 | args["SPREAD_P"].type = 1;
|
|---|
| 32 | args["SPREAD_P"].ctgr = "generator";
|
|---|
| 33 |
|
|---|
| 34 | args["BEAM_V"].args = "(0, 0, 0)cm";
|
|---|
| 35 | args["BEAM_V"].help = "Beam Vertex. Example: -BEAM_V=\"(0, 0, -20)cm\". ";
|
|---|
| 36 | args["BEAM_V"].name = "Beam Vertex";
|
|---|
| 37 | args["BEAM_V"].type = 1;
|
|---|
| 38 | args["BEAM_V"].ctgr = "generator";
|
|---|
| 39 |
|
|---|
| 40 | args["SPREAD_V"].args = "(0, 0, 0)cm";
|
|---|
| 41 | args["SPREAD_V"].help = "Spread Beam Vertex (cartesian coordinates). Example: -BEAM_V=\"(10, 10, 10)cm\". ";
|
|---|
| 42 | args["SPREAD_V"].name = "Vertex Spread";
|
|---|
| 43 | args["SPREAD_V"].type = 1;
|
|---|
| 44 | args["SPREAD_V"].ctgr = "generator";
|
|---|
| 45 |
|
|---|
| 46 | args["N"].arg = 0;
|
|---|
| 47 | args["N"].help = "Number of events to be simulated.";
|
|---|
| 48 | args["N"].name = "Number of events to be simulated";
|
|---|
| 49 | args["N"].type = 0;
|
|---|
| 50 | args["N"].ctgr = "generator";
|
|---|
| 51 |
|
|---|
| 52 | args["INPUT_GEN_FILE"].args = "gemc_internal";
|
|---|
| 53 | args["INPUT_GEN_FILE"].help = "Generator Input. Current availables file formats:\n";
|
|---|
| 54 | args["INPUT_GEN_FILE"].help += " LUND. \n";
|
|---|
| 55 | args["INPUT_GEN_FILE"].help += " Example: -INPUT_GEN_FILE=\"LUND, input.dat\"\n";
|
|---|
| 56 | args["INPUT_GEN_FILE"].name = "Generator Input File";
|
|---|
| 57 | args["INPUT_GEN_FILE"].type = 1;
|
|---|
| 58 | args["INPUT_GEN_FILE"].ctgr = "generator";
|
|---|
| 59 |
|
|---|
| 60 | args["NGENP"].arg = 1;
|
|---|
| 61 | args["NGENP"].help = "Number of Generated Particles to save in the Output.";
|
|---|
| 62 | args["NGENP"].name = "Number of Generated Particles to save in the Output";
|
|---|
| 63 | args["NGENP"].type = 0;
|
|---|
| 64 | args["NGENP"].ctgr = "generator";
|
|---|
| 65 |
|
|---|
| 66 |
|
|---|
| 67 |
|
|---|
| 68 |
|
|---|
| 69 |
|
|---|
| 70 |
|
|---|
| 71 | // ###############
|
|---|
| 72 | // Luminosity Beam
|
|---|
| 73 | // ###############
|
|---|
| 74 |
|
|---|
| 75 | args["LUMI_P"].args = "e-, 11*GeV, 0*deg, 0*deg";
|
|---|
| 76 | args["LUMI_P"].help = "Luminosity Beam particle, momentum, angles (in respect of z-axis). \n";
|
|---|
| 77 | args["LUMI_P"].help += " Example: -LUMI_P=\"proton, 1*GeV, 25*deg, 2*deg\" sets 1 GeV protons, 25 degrees in theta, 2 degrees in phi. \n";
|
|---|
| 78 | args["LUMI_P"].help += " Use -LUMI_P=\"show_all\" to print the list of G4 supported particles.\n";
|
|---|
| 79 | args["LUMI_P"].name = "Luminosity Beam particle, Energy, Theta, Phi";
|
|---|
| 80 | args["LUMI_P"].type = 1;
|
|---|
| 81 | args["LUMI_P"].ctgr = "luminosity";
|
|---|
| 82 |
|
|---|
| 83 | args["LUMI_V"].args = "(0, 0, 0)cm";
|
|---|
| 84 | args["LUMI_V"].help = "Luminosity Beam Vertex. Example: -LUMI_V=\"(0, 0, -20)cm\". ";
|
|---|
| 85 | args["LUMI_V"].name = "Luminosity Beam Vertex";
|
|---|
| 86 | args["LUMI_V"].type = 1;
|
|---|
| 87 | args["LUMI_V"].ctgr = "luminosity";
|
|---|
| 88 |
|
|---|
| 89 | args["LUMI_EVENT"].args = "0, 0*ns, 2*ns";
|
|---|
| 90 | args["LUMI_EVENT"].help = "Luminosity Beam Parameters: number of Particles/Event, Time Window, Time Between Bunches\n";
|
|---|
| 91 | args["LUMI_EVENT"].help += " Example: -LUMI_EVENT=\"10000, 120*ns, 2*ns\" simulate 10K particles per event distributed over 120 ns, at 2ns intervals. \n";
|
|---|
| 92 | args["LUMI_EVENT"].name = "Luminosity Beam Parameters";
|
|---|
| 93 | args["LUMI_EVENT"].type = 1;
|
|---|
| 94 | args["LUMI_EVENT"].ctgr = "luminosity";
|
|---|
| 95 |
|
|---|
| 96 |
|
|---|
| 97 |
|
|---|
| 98 |
|
|---|
| 99 |
|
|---|
| 100 |
|
|---|
| 101 | // ##############
|
|---|
| 102 | // MySQL Database
|
|---|
| 103 | // ##############
|
|---|
| 104 |
|
|---|
| 105 | args["DATABASE"].args = "clas12_geometry";
|
|---|
| 106 | args["DATABASE"].help = "Select mysql Database.";
|
|---|
| 107 | args["DATABASE"].name = "Select mysql Database";
|
|---|
| 108 | args["DATABASE"].type = 1;
|
|---|
| 109 | args["DATABASE"].ctgr = "mysql";
|
|---|
| 110 |
|
|---|
| 111 | args["BANK_DATABASE"].args = "clas12_banks";
|
|---|
| 112 | args["BANK_DATABASE"].help = "Select mysql Bank Database.";
|
|---|
| 113 | args["BANK_DATABASE"].name = "Select mysql Bank Database";
|
|---|
| 114 | args["BANK_DATABASE"].type = 1;
|
|---|
| 115 | args["BANK_DATABASE"].ctgr = "mysql";
|
|---|
| 116 |
|
|---|
| 117 | args["GT"].args = "BST";
|
|---|
| 118 | args["GT"].help = "Selects Geometry table. This option is overwritten with the gemc read card.";
|
|---|
| 119 | args["GT"].name = "Geometry table";
|
|---|
| 120 | args["GT"].type = 1;
|
|---|
| 121 | args["GT"].ctgr = "mysql";
|
|---|
| 122 |
|
|---|
| 123 |
|
|---|
| 124 |
|
|---|
| 125 |
|
|---|
| 126 |
|
|---|
| 127 |
|
|---|
| 128 |
|
|---|
| 129 |
|
|---|
| 130 | // #########
|
|---|
| 131 | // Verbosity
|
|---|
| 132 | // #########
|
|---|
| 133 |
|
|---|
| 134 | args["G4P_VERBOSITY"].arg = 1;
|
|---|
| 135 | args["G4P_VERBOSITY"].help = "Controls Physical Volumes Construction Log Output.";
|
|---|
| 136 | args["G4P_VERBOSITY"].name = "Logical Volume Verbosity";
|
|---|
| 137 | args["G4P_VERBOSITY"].type = 0;
|
|---|
| 138 | args["G4P_VERBOSITY"].ctgr = "verbosity";
|
|---|
| 139 |
|
|---|
| 140 | args["GEO_VERBOSITY"].arg = 1;
|
|---|
| 141 | args["GEO_VERBOSITY"].help = "Controls Geometry Construction Log Output.";
|
|---|
| 142 | args["GEO_VERBOSITY"].name = "Geometry Verbosity";
|
|---|
| 143 | args["GEO_VERBOSITY"].type = 0;
|
|---|
| 144 | args["GEO_VERBOSITY"].ctgr = "verbosity";
|
|---|
| 145 |
|
|---|
| 146 | args["GUI_VERBOSITY"].arg = 1;
|
|---|
| 147 | args["GUI_VERBOSITY"].help = "Controls GUI Construction Log Output.";
|
|---|
| 148 | args["GUI_VERBOSITY"].name = "GUI Verbosity";
|
|---|
| 149 | args["GUI_VERBOSITY"].type = 0;
|
|---|
| 150 | args["GUI_VERBOSITY"].ctgr = "verbosity";
|
|---|
| 151 |
|
|---|
| 152 | args["HIT_VERBOSITY"].arg = 1;
|
|---|
| 153 | args["HIT_VERBOSITY"].help = "Controls Hits Log Output. ";
|
|---|
| 154 | args["HIT_VERBOSITY"].name = "Hit Verbosity";
|
|---|
| 155 | args["HIT_VERBOSITY"].type = 0;
|
|---|
| 156 | args["HIT_VERBOSITY"].ctgr = "verbosity";
|
|---|
| 157 |
|
|---|
| 158 | args["LOG_MSG"].args = " >>> gemc";
|
|---|
| 159 | args["LOG_MSG"].help = "Log Messages Header.";
|
|---|
| 160 | args["LOG_MSG"].name = "Log Messages Header";
|
|---|
| 161 | args["LOG_MSG"].type = 1;
|
|---|
| 162 | args["LOG_MSG"].ctgr = "verbosity";
|
|---|
| 163 |
|
|---|
| 164 | args["CATCH"].args = "Maurizio";
|
|---|
| 165 | args["CATCH"].help = "Catch volumes matching the given string.";
|
|---|
| 166 | args["CATCH"].name = "Volume catcher";
|
|---|
| 167 | args["CATCH"].type = 1;
|
|---|
| 168 | args["CATCH"].ctgr = "verbosity";
|
|---|
| 169 |
|
|---|
| 170 | args["MGN_VERBOSITY"].arg = 1;
|
|---|
| 171 | args["MGN_VERBOSITY"].help = "Controls Magnetic Fields Log Output.";
|
|---|
| 172 | args["MGN_VERBOSITY"].name = "Magnetic Fields Verbosity";
|
|---|
| 173 | args["MGN_VERBOSITY"].type = 0;
|
|---|
| 174 | args["MGN_VERBOSITY"].ctgr = "verbosity";
|
|---|
| 175 |
|
|---|
| 176 | args["PRINT_EVENT"].arg = 1000;
|
|---|
| 177 | args["PRINT_EVENT"].help = "-PRINT_EVENT=N: Print Event Number every N events.";
|
|---|
| 178 | args["PRINT_EVENT"].name = "Print Event Modulus";
|
|---|
| 179 | args["PRINT_EVENT"].type = 0;
|
|---|
| 180 | args["PRINT_EVENT"].ctgr = "verbosity";
|
|---|
| 181 |
|
|---|
| 182 | args["OUT_VERBOSITY"].arg = 1;
|
|---|
| 183 | args["OUT_VERBOSITY"].help = "Controls Bank Log Output.";
|
|---|
| 184 | args["OUT_VERBOSITY"].name = "Bank Output Verbosity";
|
|---|
| 185 | args["OUT_VERBOSITY"].type = 0;
|
|---|
| 186 | args["OUT_VERBOSITY"].ctgr = "verbosity";
|
|---|
| 187 |
|
|---|
| 188 | args["PHY_VERBOSITY"].arg = 1;
|
|---|
| 189 | args["PHY_VERBOSITY"].help = "Controls Physics List Log Output.";
|
|---|
| 190 | args["PHY_VERBOSITY"].name = "Physics List Verbosity";
|
|---|
| 191 | args["PHY_VERBOSITY"].type = 0;
|
|---|
| 192 | args["PHY_VERBOSITY"].ctgr = "verbosity";
|
|---|
| 193 |
|
|---|
| 194 | args["GEN_VERBOSITY"].arg = 0;
|
|---|
| 195 | args["GEN_VERBOSITY"].help = "Controls Geant4 Generator Verbosity.";
|
|---|
| 196 | args["GEN_VERBOSITY"].name = "Geant4 Generator Verbosity";
|
|---|
| 197 | args["GEN_VERBOSITY"].type = 0;
|
|---|
| 198 | args["GEN_VERBOSITY"].ctgr = "verbosity";
|
|---|
| 199 |
|
|---|
| 200 | args["G4TRACK_VERBOSITY"].arg = 0;
|
|---|
| 201 | args["G4TRACK_VERBOSITY"].help = "Controls Geant4 Track Verbosity.";
|
|---|
| 202 | args["G4TRACK_VERBOSITY"].name = "Geant4 Track Verbosity";
|
|---|
| 203 | args["G4TRACK_VERBOSITY"].type = 0;
|
|---|
| 204 | args["G4TRACK_VERBOSITY"].ctgr = "verbosity";
|
|---|
| 205 |
|
|---|
| 206 |
|
|---|
| 207 |
|
|---|
| 208 |
|
|---|
| 209 |
|
|---|
| 210 |
|
|---|
| 211 |
|
|---|
| 212 |
|
|---|
| 213 |
|
|---|
| 214 |
|
|---|
| 215 |
|
|---|
| 216 |
|
|---|
| 217 | // ###########
|
|---|
| 218 | // Run Control
|
|---|
| 219 | // ###########
|
|---|
| 220 |
|
|---|
| 221 | args["EXEC_MACRO"].args = "no";
|
|---|
| 222 | args["EXEC_MACRO"].help = "Executes commands in macro file.";
|
|---|
| 223 | args["EXEC_MACRO"].name = "Executes commands in macro file";
|
|---|
| 224 | args["EXEC_MACRO"].type = 1;
|
|---|
| 225 | args["EXEC_MACRO"].ctgr = "control";
|
|---|
| 226 |
|
|---|
| 227 | args["CHECK_OVERLAPS"].arg = 0;
|
|---|
| 228 | args["CHECK_OVERLAPS"].help = "Checks Overlapping Volumes at Construction time.";
|
|---|
| 229 | args["CHECK_OVERLAPS"].name = "Checks Overlapping Volumes at Construction time";
|
|---|
| 230 | args["CHECK_OVERLAPS"].type = 0;
|
|---|
| 231 | args["CHECK_OVERLAPS"].ctgr = "control";
|
|---|
| 232 |
|
|---|
| 233 | args["USE_QT"].arg = 1;
|
|---|
| 234 | args["USE_QT"].help = "Use/Don't Use the QT GUI. If set to 2, use OGLIX.";
|
|---|
| 235 | args["USE_QT"].name = "QT Gui";
|
|---|
| 236 | args["USE_QT"].type = 0;
|
|---|
| 237 | args["USE_QT"].ctgr = "control";
|
|---|
| 238 |
|
|---|
| 239 | args["RANDOM"].args = "TIME";
|
|---|
| 240 | args["RANDOM"].help = "Random Engine Initialization. The argument (seed) can be an integer or the string TIME.";
|
|---|
| 241 | args["RANDOM"].name = "Random Engine Initialization";
|
|---|
| 242 | args["RANDOM"].type = 1;
|
|---|
| 243 | args["RANDOM"].ctgr = "control";
|
|---|
| 244 |
|
|---|
| 245 | args["gcard"].args = "no";
|
|---|
| 246 | args["gcard"].help = "gemc card file.";
|
|---|
| 247 | args["gcard"].name = "gemc card file";
|
|---|
| 248 | args["gcard"].type = 1;
|
|---|
| 249 | args["gcard"].ctgr = "control";
|
|---|
| 250 |
|
|---|
| 251 | args["EVN"].arg = 1;
|
|---|
| 252 | args["EVN"].help = "Initial Event Number.";
|
|---|
| 253 | args["EVN"].name = "Initial Event Number";
|
|---|
| 254 | args["EVN"].type = 0;
|
|---|
| 255 | args["EVN"].ctgr = "control";
|
|---|
| 256 |
|
|---|
| 257 |
|
|---|
| 258 |
|
|---|
| 259 |
|
|---|
| 260 |
|
|---|
| 261 |
|
|---|
| 262 |
|
|---|
| 263 |
|
|---|
| 264 |
|
|---|
| 265 |
|
|---|
| 266 |
|
|---|
| 267 |
|
|---|
| 268 | // ######
|
|---|
| 269 | // Output
|
|---|
| 270 | // ######
|
|---|
| 271 |
|
|---|
| 272 | args["OUTPUT"].args = "no, output";
|
|---|
| 273 | args["OUTPUT"].help = "Type of output, output filename.";
|
|---|
| 274 | args["OUTPUT"].name = "Type of output, output filename. Supported output: evio, txt. Example: -OUTPUT=\"evio, out.ev\"";
|
|---|
| 275 | args["OUTPUT"].type = 1;
|
|---|
| 276 | args["OUTPUT"].ctgr = "output";
|
|---|
| 277 |
|
|---|
| 278 |
|
|---|
| 279 |
|
|---|
| 280 |
|
|---|
| 281 |
|
|---|
| 282 |
|
|---|
| 283 |
|
|---|
| 284 |
|
|---|
| 285 |
|
|---|
| 286 |
|
|---|
| 287 |
|
|---|
| 288 | // #######
|
|---|
| 289 | // Physics
|
|---|
| 290 | // #######
|
|---|
| 291 |
|
|---|
| 292 | args["OPT_PH"].arg = 0;
|
|---|
| 293 | args["OPT_PH"].help = "Activate Optical Physics Processes in gemc Physics List.";
|
|---|
| 294 | args["OPT_PH"].name = "Optical Physics";
|
|---|
| 295 | args["OPT_PH"].type = 0;
|
|---|
| 296 | args["OPT_PH"].ctgr = "physics";
|
|---|
| 297 |
|
|---|
| 298 | args["USE_PHYSICSL"].args = "gemc";
|
|---|
| 299 | args["USE_PHYSICSL"].help = "Physics List. Avaliable choices: \n\n";
|
|---|
| 300 | args["USE_PHYSICSL"].help += " * gemc: comprehensive physics list. Optical Physics may be activated with OPT_PH=1 \n\n";
|
|---|
| 301 | args["USE_PHYSICSL"].help += " The following is a list of other physics lists. More infos can be found here:\n\n";
|
|---|
| 302 | args["USE_PHYSICSL"].help += " http://geant4.cern.ch/support/proc_mod_catalog/physics_lists/referencePL.shtml\n\n";
|
|---|
| 303 | args["USE_PHYSICSL"].help += " * LHEP: This is the main LHEP based physics list, using exclusively parameterised modeling. \n";
|
|---|
| 304 | args["USE_PHYSICSL"].help += " * LHEP_BERT: Like LHEP, but using Geant4 Bertini cascade for primary protons, neutrons, \n";
|
|---|
| 305 | args["USE_PHYSICSL"].help += " pions and Kaons below ~10GeV. \n";
|
|---|
| 306 | args["USE_PHYSICSL"].help += " * LHEP_BERT_HP: Like LHEP_BERT with the addition to use the data driven high precision.\n";
|
|---|
| 307 | args["USE_PHYSICSL"].help += " neutron package (NeutronHP) to transport neutrons below 20 MeV down to thermal energies.\n";
|
|---|
| 308 | args["USE_PHYSICSL"].help += " * QGSP: String model based physics list. \n";
|
|---|
| 309 | args["USE_PHYSICSL"].help += " * QGSP_BERT: Like QGSP, but using Geant4 Bertini cascade for primary protons, neutrons, \n";
|
|---|
| 310 | args["USE_PHYSICSL"].help += " pions and Kaons below ~10GeV. \n";
|
|---|
| 311 | args["USE_PHYSICSL"].help += " * QGSP_BERT_HP: Like QGSP_BERT with the addition to use the data driven high precision.\n";
|
|---|
| 312 | args["USE_PHYSICSL"].help += " neutron package (NeutronHP) to transport neutrons below 20 MeV down to thermal energies.\n";
|
|---|
| 313 | args["USE_PHYSICSL"].help += " * QGSP_BIC: Like QGSP, but using Geant4 Binary cascade for primary protons and neutrons \n";
|
|---|
| 314 | args["USE_PHYSICSL"].help += " with energies below ~10GeV. \n";
|
|---|
| 315 | args["USE_PHYSICSL"].help += " * QGSP_BIC_HP: Like QGSP_BIC with the addition to use the data driven high precision.\n";
|
|---|
| 316 | args["USE_PHYSICSL"].help += " neutron package (NeutronHP) to transport neutrons below 20 MeV down to thermal energies.\n";
|
|---|
| 317 | args["USE_PHYSICSL"].name = "Choice of Physics List";
|
|---|
| 318 | args["USE_PHYSICSL"].type = 1;
|
|---|
| 319 | args["USE_PHYSICSL"].ctgr = "physics";
|
|---|
| 320 |
|
|---|
| 321 | args["HALL_MATERIAL"].args = "Vacuum";
|
|---|
| 322 | args["HALL_MATERIAL"].help = "Composition of the Experimental Hall. \n";
|
|---|
| 323 | args["HALL_MATERIAL"].help += " Air normal simulation\n";
|
|---|
| 324 | args["HALL_MATERIAL"].help += " Air_Opt Simulation with Optical Physics (default)\n";
|
|---|
| 325 | args["HALL_MATERIAL"].help += " Vacuum\n";
|
|---|
| 326 | args["HALL_MATERIAL"].name = "Composition of the Experimental Hall";
|
|---|
| 327 | args["HALL_MATERIAL"].type = 1;
|
|---|
| 328 | args["HALL_MATERIAL"].ctgr = "physics";
|
|---|
| 329 |
|
|---|
| 330 | args["HALL_FIELD"].args = "no";
|
|---|
| 331 | args["HALL_FIELD"].help = "Magnetic Field of the Hall. \n";
|
|---|
| 332 | args["HALL_FIELD"].name = "Magnetic Field of the Hall";
|
|---|
| 333 | args["HALL_FIELD"].type = 1;
|
|---|
| 334 | args["HALL_FIELD"].ctgr = "physics";
|
|---|
| 335 |
|
|---|
| 336 |
|
|---|
| 337 |
|
|---|
| 338 |
|
|---|
| 339 |
|
|---|
| 340 |
|
|---|
| 341 |
|
|---|
| 342 |
|
|---|
| 343 |
|
|---|
| 344 | // #######
|
|---|
| 345 | // General
|
|---|
| 346 | // #######
|
|---|
| 347 |
|
|---|
| 348 | args["SERVICE"].arg = 0;
|
|---|
| 349 | args["SERVICE"].help = "Runs gemc as a service.";
|
|---|
| 350 | args["SERVICE"].name = "Runs gemc as a service";
|
|---|
| 351 | args["SERVICE"].type = 0;
|
|---|
| 352 | args["SERVICE"].ctgr = "general";
|
|---|
| 353 |
|
|---|
| 354 |
|
|---|
| 355 | }
|
|---|
| 356 |
|
|---|
| 357 | gemc_opts::~gemc_opts(){}
|
|---|
| 358 |
|
|---|
| 359 | int gemc_opts::Set(int argc, char **argv)
|
|---|
| 360 | {
|
|---|
| 361 | string arg;
|
|---|
| 362 | string com;
|
|---|
| 363 | string opt;
|
|---|
| 364 | cout << endl;
|
|---|
| 365 | string comp;
|
|---|
| 366 |
|
|---|
| 367 | map<string, opts>::iterator itm;
|
|---|
| 368 |
|
|---|
| 369 | set<string> category;
|
|---|
| 370 |
|
|---|
| 371 | // Filling Categories
|
|---|
| 372 | for(itm = args.begin(); itm != args.end(); itm++)
|
|---|
| 373 | if(category.find(itm->second.ctgr) == category.end()) category.insert(itm->second.ctgr);
|
|---|
| 374 |
|
|---|
| 375 |
|
|---|
| 376 |
|
|---|
| 377 | // -help-all
|
|---|
| 378 | for(int i=1; i<argc; i++)
|
|---|
| 379 | {
|
|---|
| 380 | arg = argv[i];
|
|---|
| 381 | com = "-help-all";
|
|---|
| 382 | if(arg == com)
|
|---|
| 383 | {
|
|---|
| 384 | cout << " Usage: -Option=<option>" << endl << endl;
|
|---|
| 385 | cout << " Options:" << endl << endl ;
|
|---|
| 386 |
|
|---|
| 387 | for(itm = args.begin(); itm != args.end(); itm++)
|
|---|
| 388 | cout << " > Option " << itm->first << ": " << itm->second.help << endl;
|
|---|
| 389 |
|
|---|
| 390 | cout << endl << endl;
|
|---|
| 391 | exit(0);
|
|---|
| 392 | }
|
|---|
| 393 | }
|
|---|
| 394 |
|
|---|
| 395 |
|
|---|
| 396 | // -help
|
|---|
| 397 | set<string> :: iterator itcat;
|
|---|
| 398 | for(int i=1; i<argc; i++)
|
|---|
| 399 | {
|
|---|
| 400 | arg = argv[i];
|
|---|
| 401 | com = "-help";
|
|---|
| 402 | if(arg == com)
|
|---|
| 403 | {
|
|---|
| 404 | cout << endl << endl;
|
|---|
| 405 | cout << " Help Options:" << endl << endl ;
|
|---|
| 406 | cout << " > -help-all: all available options. " << endl << endl;
|
|---|
| 407 | for(itcat = category.begin(); itcat != category.end(); itcat++)
|
|---|
| 408 | {
|
|---|
| 409 |
|
|---|
| 410 | cout << " > -help-" << *itcat << " ";
|
|---|
| 411 | cout.width(15);
|
|---|
| 412 | cout << *itcat << " options." << endl;
|
|---|
| 413 | }
|
|---|
| 414 | cout << endl << endl;
|
|---|
| 415 | exit(0);
|
|---|
| 416 | }
|
|---|
| 417 | }
|
|---|
| 418 |
|
|---|
| 419 |
|
|---|
| 420 | // -help-option
|
|---|
| 421 | for(int i=1; i<argc; i++)
|
|---|
| 422 | {
|
|---|
| 423 | arg = argv[i];
|
|---|
| 424 | for(itcat = category.begin(); itcat != category.end(); itcat++)
|
|---|
| 425 | {
|
|---|
| 426 | com = "-help-" + *itcat;
|
|---|
| 427 | if(arg == com)
|
|---|
| 428 | {
|
|---|
| 429 | cout << endl << endl << " ## " << *itcat << " ## " << endl << endl;
|
|---|
| 430 | cout << " Usage: -Option=<option>" << endl << endl;
|
|---|
| 431 | for(itm = args.begin(); itm != args.end(); itm++)
|
|---|
| 432 | if(itm->second.ctgr == *itcat) cout << " > " << itm->first << ": " << itm->second.help << endl;
|
|---|
| 433 | cout << endl << endl;
|
|---|
| 434 | exit(0);
|
|---|
| 435 | }
|
|---|
| 436 | }
|
|---|
| 437 | }
|
|---|
| 438 |
|
|---|
| 439 |
|
|---|
| 440 | for(int i=1; i<argc; i++)
|
|---|
| 441 | {
|
|---|
| 442 | arg = argv[i];
|
|---|
| 443 | map<string, opts>::iterator itm;
|
|---|
| 444 | for(itm = args.begin(); itm != args.end(); itm++)
|
|---|
| 445 | {
|
|---|
| 446 | com = "-" + itm->first + "=";
|
|---|
| 447 | comp.assign(arg, 0, arg.find("=") + 1);
|
|---|
| 448 | if(comp == com)
|
|---|
| 449 | {
|
|---|
| 450 | opt.assign(arg, com.size(), arg.size()-com.size());
|
|---|
| 451 | itm->second.args = opt;
|
|---|
| 452 | itm->second.arg = atof(opt.c_str());
|
|---|
| 453 | cout << " >>> Options: " << itm->second.name << " set to: " ;
|
|---|
| 454 | if(itm->second.type) cout << itm->second.args;
|
|---|
| 455 | else cout << itm->second.arg ;
|
|---|
| 456 | cout << endl;
|
|---|
| 457 | }
|
|---|
| 458 | }
|
|---|
| 459 | }
|
|---|
| 460 |
|
|---|
| 461 | cout << endl;
|
|---|
| 462 |
|
|---|
| 463 | return 1;
|
|---|
| 464 | }
|
|---|
| 465 |
|
|---|
| 466 |
|
|---|
| 467 |
|
|---|
| 468 |
|
|---|
| 469 |
|
|---|