33 #define INCLXX_IN_GEANT4_MODE 1
42 #ifdef HAS_BOOST_PROGRAM_OPTIONS
43 #include <boost/program_options/options_description.hpp>
44 #include <boost/program_options/parsers.hpp>
45 #include <boost/program_options/variables_map.hpp>
64 projectileSpecies = proj;
65 projectileKineticEnergy = projectileE;
69 #ifdef HAS_BOOST_PROGRAM_OPTIONS
71 const std::string suggestHelpMsg(
"You might want to run `INCLCascade -h' to get a help message.\n");
76 boost::program_options::options_description hiddenOptDesc(
"Hidden options");
77 hiddenOptDesc.add_options()
78 (
"input-file", boost::program_options::value<std::string>(&inputFileName),
"input file")
79 (
"impact-parameter", boost::program_options::value<G4double>(&impactParameter)->default_value(-1.),
"impact parameter")
83 std::stringstream verbosityDescription;
84 verbosityDescription <<
"set verbosity level:\n"
85 <<
" 0: \tquiet, suppress all output messages\n"
86 <<
" " <<
InfoMsg <<
": \tminimal logging\n"
87 <<
" " <<
FatalMsg <<
": \tlog fatal error messages as well\n"
88 <<
" " <<
ErrorMsg <<
": \tlog error messages as well\n"
89 <<
" " <<
WarningMsg <<
": \tlog warning messages as well\n"
90 <<
" " <<
DebugMsg <<
": \tlog debug messages as well\n"
91 <<
" " <<
DataBlockMsg <<
": \tlog data-block messages as well";
93 boost::program_options::options_description genericOptDesc(
"Generic options");
94 genericOptDesc.add_options()
95 (
"help,h",
"produce this help message")
96 (
"version",
"print version string and exit")
100 boost::program_options::options_description runOptDesc(
"Run options");
101 runOptDesc.add_options()
102 (
"title", boost::program_options::value<std::string>(&title)->default_value(
"INCL default run title"),
"run title")
103 (
"output,o", boost::program_options::value<std::string>(&outputFileRoot),
"root for generating output file names. Suffixes (.root, .out, etc.) will be appended to this root. Defaults to the input file name, if given; otherwise, defaults to a string composed of the explicitly specified options")
104 (
"logfile,l", boost::program_options::value<std::string>(&logFileName),
"log file name. Defaults to `<output_root>.log'. Use `-' if you want to redirect logging to stdout")
105 (
"number-shots,N", boost::program_options::value<G4int>(&nShots),
"* number of shots")
106 (
"target,t", boost::program_options::value<std::string>(&targetString),
"* target nuclide. Can be specified as Fe56, 56Fe, Fe-56, 56-Fe, Fe_56, 56_Fe or Fe. If the mass number is omitted, natural target composition is assumed.")
107 (
"projectile,p", boost::program_options::value<std::string>(&projectileString),
"* projectile name:\n"
110 " \tpi+, piplus, pion+, pionplus\n"
111 " \tpi0, pizero, pion0, pionzero\n"
112 " \tpi-, piminus, pion-, pionminus\n"
113 " \td, t, a, deuteron, triton, alpha\n"
114 " \tHe-4, He4, 4He (and so on)\n")
115 (
"energy,E", boost::program_options::value<G4float>(&projectileKineticEnergy),
"* total kinetic energy of the projectile, in MeV")
116 (
"verbose-event", boost::program_options::value<G4int>(&verboseEvent)->default_value(-1),
"request verbose logging for the specified event only")
117 (
"random-seed-1", boost::program_options::value<G4int>(&randomSeed1)->default_value(666),
"first seed for the random-number generator")
118 (
"random-seed-2", boost::program_options::value<G4int>(&randomSeed2)->default_value(777),
"second seed for the random-number generator")
119 (
"inclxx-datafile-path", boost::program_options::value<std::string>(&INCLXXDataFilePath)->default_value(
"./data/"))
120 #ifdef INCL_DEEXCITATION_ABLAXX
121 (
"ablav3p-cxx-datafile-path", boost::program_options::value<std::string>(&ablav3pCxxDataFilePath)->default_value(
"./de-excitation/ablaxx/data/G4ABLA3.0/"))
123 #ifdef INCL_DEEXCITATION_ABLA07
124 (
"abla07-datafile-path", boost::program_options::value<std::string>(&abla07DataFilePath)->default_value(
"./de-excitation/abla07/upstream/tables/"))
126 #ifdef INCL_DEEXCITATION_GEMINIXX
127 (
"geminixx-datafile-path", boost::program_options::value<std::string>(&geminixxDataFilePath)->default_value(
"./de-excitation/geminixx/upstream/"))
129 (
"verbosity,v", boost::program_options::value<G4int>(&verbosity)->default_value(4), verbosityDescription.str().c_str())
133 boost::program_options::options_description physicsOptDesc(
"Physics options");
134 physicsOptDesc.add_options()
135 (
"pauli", boost::program_options::value<std::string>(&pauliString)->default_value(
"strict-statistical"),
"Pauli-blocking algorithm:\n"
136 " \tstrict-statistical (default)\n"
141 (
"cdpp", boost::program_options::value<G4bool>(&
CDPP)->default_value(
true),
"whether to apply CDPP after collisions:\n \ttrue, 1 (default)\n \tfalse, 0")
142 (
"coulomb", boost::program_options::value<std::string>(&coulombString)->default_value(
"non-relativistic"),
"Coulomb-distortion algorithm:\n \tnon-relativistic (default)\n \tnone")
143 (
"potential", boost::program_options::value<std::string>(&potentialString)->default_value(
"isospin-energy"),
"nucleon potential:\n \tisospin-energy-smooth\n \tisospin-energy (default)\n \tisospin\n \tconstant")
144 (
"pion-potential", boost::program_options::value<G4bool>(&pionPotential)->default_value(
"true"),
"whether to use a pion potential:\n \ttrue, 1 (default)\n \tfalse, 0")
145 (
"local-energy-BB", boost::program_options::value<std::string>(&localEnergyBBString)->default_value(
"first-collision"),
"local energy in baryon-baryon collisions:\n \talways\n \tfirst-collision (default)\n \tnever")
146 (
"local-energy-pi", boost::program_options::value<std::string>(&localEnergyPiString)->default_value(
"first-collision"),
"local energy in pi-N collisions and in delta decays:\n \talways\n \tfirst-collision (default)\n \tnever")
147 (
"de-excitation", boost::program_options::value<std::string>(&deExcitationString)->default_value(
"none"),
"which de-excitation model to use:"
148 "\n \tnone (default)"
149 #ifdef INCL_DEEXCITATION_ABLAXX
152 #ifdef INCL_DEEXCITATION_ABLA07
155 #ifdef INCL_DEEXCITATION_SMM
158 #ifdef INCL_DEEXCITATION_GEMINIXX
162 (
"cluster-algorithm", boost::program_options::value<std::string>(&clusterAlgorithmString)->default_value(
"intercomparison"),
"clustering algorithm for production of composites:\n \tintercomparison (default)\n \tnone")
163 (
"cluster-max-mass", boost::program_options::value<G4int>(&clusterMaxMass)->default_value(8),
"maximum mass of produced composites:\n \tminimum 2\n \tmaximum 12")
164 (
"back-to-spectator", boost::program_options::value<G4bool>(&backToSpectator)->default_value(
"true"),
"whether to use back-to-spectator:\n \ttrue, 1 (default)\n \tfalse, 0")
165 (
"use-real-masses", boost::program_options::value<G4bool>(&useRealMasses)->default_value(
"true"),
"whether to use real masses for the outgoing particle energies:\n \ttrue, 1 (default)\n \tfalse, 0")
166 (
"separation-energies", boost::program_options::value<std::string>(&separationEnergyString)->default_value(
"INCL"),
"how to assign the separation energies of the INCL nucleus:\n \tINCL (default)\n \treal\n \treal-light")
170 boost::program_options::options_description cmdLineOptions;
171 cmdLineOptions.add(hiddenOptDesc).add(genericOptDesc).add(runOptDesc).add(physicsOptDesc);
174 boost::program_options::options_description configFileOptions;
175 configFileOptions.add(runOptDesc).add(physicsOptDesc);
178 boost::program_options::options_description visibleOptions;
179 visibleOptions.add(genericOptDesc).add(runOptDesc).add(physicsOptDesc);
184 boost::program_options::positional_options_description
p;
185 p.add(
"input-file", 1);
189 boost::program_options::command_line_style::default_style &
190 ~boost::program_options::command_line_style::allow_guessing;
193 boost::program_options::variables_map variablesMap;
194 boost::program_options::store(boost::program_options::command_line_parser(argc, argv).
196 options(cmdLineOptions).positional(p).run(), variablesMap);
197 boost::program_options::notify(variablesMap);
201 if(variablesMap.count(
"input-file")) {
202 std::ifstream inputFileStream(inputFileName.c_str());
203 if(!inputFileStream) {
204 std::cerr <<
"Cannot open input file: " << inputFileName << std::endl;
205 std::exit(EXIT_FAILURE);
208 boost::program_options::parsed_options parsedOptions = boost::program_options::parse_config_file(inputFileStream, configFileOptions,
true);
211 std::vector<std::string> unhandledOptions =
212 boost::program_options::collect_unrecognized(parsedOptions.options, boost::program_options::exclude_positional);
213 G4bool ignoreNext =
false;
214 const std::string match =
"-datafile-path";
215 for(std::vector<std::string>::const_iterator i=unhandledOptions.begin(); i!=unhandledOptions.end(); ++i) {
220 if(i->rfind(match) == i->length()-match.length()) {
221 std::cerr <<
"Ignoring unrecognized option " << *i << std::endl;
224 std::cerr <<
"Error: unrecognized option " << *i << std::endl;
225 std::cerr << suggestHelpMsg;
226 std::exit(EXIT_FAILURE);
231 boost::program_options::store(parsedOptions, variablesMap);
232 boost::program_options::notify(variablesMap);
234 inputFileStream.close();
238 std::string configFileName;
239 const char *
const configFileVar = getenv(
"INCLXXRC");
241 configFileName = configFileVar;
243 const char *
const homeDirectoryPointer = getenv(
"HOME");
244 if(homeDirectoryPointer) {
245 std::string homeDirectory(homeDirectoryPointer);
246 configFileName = homeDirectory +
"/.inclxxrc";
248 std::cerr <<
"Could not determine the user's home directory. "
249 <<
"Are you running Linux, Unix or BSD?"<< std::endl;
250 std::exit(EXIT_FAILURE);
254 std::ifstream configFileStream(configFileName.c_str());
255 std::cout <<
"Reading config file " << configFileName << std::endl;
256 if(!configFileStream) {
257 std::cerr <<
"INCL++ config file " << configFileName
258 <<
" not found. Continuing the run regardless."
262 boost::program_options::parsed_options parsedOptions = boost::program_options::parse_config_file(configFileStream, configFileOptions,
true);
263 boost::program_options::store(parsedOptions, variablesMap);
266 std::vector<std::string> unhandledOptions =
267 boost::program_options::collect_unrecognized(parsedOptions.options, boost::program_options::exclude_positional);
268 G4bool ignoreNext =
false;
269 const std::string match =
"-datafile-path";
270 for(std::vector<std::string>::const_iterator i=unhandledOptions.begin(); i!=unhandledOptions.end(); ++i) {
275 if(i->rfind(match) == i->length()-match.length()) {
276 std::cerr <<
"Ignoring unrecognized option " << *i << std::endl;
279 std::cerr <<
"Error: unrecognized option " << *i << std::endl;
280 std::cerr << suggestHelpMsg;
281 std::exit(EXIT_FAILURE);
286 boost::program_options::store(parsedOptions, variablesMap);
287 boost::program_options::notify(variablesMap);
289 configFileStream.close();
296 if(variablesMap.count(
"help")) {
297 std::cout <<
"Usage: INCLCascade [options] <input_file>" << std::endl;
298 std::cout << std::endl <<
"Options marked with a * are compulsory, i.e. they must be provided either on\nthe command line or in the input file." << std::endl;
299 std::cout << visibleOptions << std::endl;
300 std::exit(EXIT_SUCCESS);
304 if(variablesMap.count(
"version")) {
305 std::cout <<
"INCL++ version " <<
getVersionID() << std::endl;
306 std::exit(EXIT_SUCCESS);
311 std::string missingOption(
"");
312 if(!variablesMap.count(
"number-shots"))
313 missingOption =
"number-shots";
314 else if(!variablesMap.count(
"target"))
315 missingOption =
"target";
316 else if(!variablesMap.count(
"projectile"))
317 missingOption =
"projectile";
318 else if(!variablesMap.count(
"energy"))
319 missingOption =
"energy";
320 if(!missingOption.empty()) {
321 std::cerr <<
"Required option " << missingOption <<
" is missing." << std::endl;
322 std::cerr << suggestHelpMsg;
323 std::exit(EXIT_FAILURE);
326 std::cout <<
"Not performing a full run. This had better be a test..." << std::endl;
330 projectileSpecies = ParticleSpecies(projectileString);
332 std::cerr <<
"Error: unrecognized particle type " << projectileString << std::endl;
333 std::cerr << suggestHelpMsg;
334 std::exit(EXIT_FAILURE);
338 if(variablesMap.count(
"target")) {
339 targetSpecies = ParticleSpecies(targetString);
341 std::cerr <<
"Unrecognized target. You specified: " << targetString << std::endl
342 <<
" The target nuclide must be specified in one of the following forms:" << std::endl
343 <<
" Fe56, 56Fe, Fe-56, 56-Fe, Fe_56, 56_Fe, Fe" << std::endl
344 <<
" You can also use IUPAC element names (such as Uuh)." << std::endl;
345 std::cerr << suggestHelpMsg;
346 std::exit(EXIT_FAILURE);
348 if(targetSpecies.
theA==0)
349 naturalTarget =
true;
353 if(variablesMap.count(
"pauli")) {
354 std::string pauliNorm = pauliString;
355 std::transform(pauliNorm.begin(), pauliNorm.end(), pauliNorm.begin(), ::tolower);
356 if(pauliNorm==
"statistical")
358 else if(pauliNorm==
"strict")
360 else if(pauliNorm==
"strict-statistical")
362 else if(pauliNorm==
"global")
364 else if(pauliNorm==
"none")
367 std::cerr <<
"Unrecognized Pauli-blocking algorithm. Must be one of:" << std::endl
368 <<
" strict-statistical (default)" << std::endl
369 <<
" strict" << std::endl
370 <<
" statistical" << std::endl
371 <<
" global" << std::endl
372 <<
" none" << std::endl;
373 std::cerr << suggestHelpMsg;
374 std::exit(EXIT_FAILURE);
379 if(variablesMap.count(
"coulomb")) {
380 std::string coulombNorm = coulombString;
381 std::transform(coulombNorm.begin(), coulombNorm.end(), coulombNorm.begin(), ::tolower);
382 if(coulombNorm==
"non-relativistic")
384 else if(coulombNorm==
"none")
387 std::cerr <<
"Unrecognized Coulomb-distortion algorithm. Must be one of:" << std::endl
388 <<
" non-relativistic-heavy-ion (default)" << std::endl
389 <<
" non-relativistic" << std::endl
390 <<
" none" << std::endl;
391 std::cerr << suggestHelpMsg;
392 std::exit(EXIT_FAILURE);
397 if(variablesMap.count(
"potential")) {
398 std::string potentialNorm = potentialString;
399 std::transform(potentialNorm.begin(), potentialNorm.end(), potentialNorm.begin(), ::tolower);
400 if(potentialNorm==
"isospin-energy-smooth") {
402 }
else if(potentialNorm==
"isospin-energy") {
404 }
else if(potentialNorm==
"isospin")
406 else if(potentialNorm==
"constant")
409 std::cerr <<
"Unrecognized potential type. Must be one of:" << std::endl
410 <<
" isospin-energy-smooth" << std::endl
411 <<
" isospin-energy (default)" << std::endl
412 <<
" isospin" << std::endl
413 <<
" constant" << std::endl;
414 std::cerr << suggestHelpMsg;
415 std::exit(EXIT_FAILURE);
420 if(variablesMap.count(
"local-energy-BB")) {
421 std::string localEnergyBBNorm = localEnergyBBString;
422 std::transform(localEnergyBBNorm.begin(), localEnergyBBNorm.end(), localEnergyBBNorm.begin(), ::tolower);
423 if(localEnergyBBNorm==
"always") {
425 }
else if(localEnergyBBNorm==
"first-collision")
427 else if(localEnergyBBNorm==
"never")
430 std::cerr <<
"Unrecognized local-energy-BB type. Must be one of:" << std::endl
431 <<
" always" << std::endl
432 <<
" first-collision (default)" << std::endl
433 <<
" never" << std::endl;
434 std::cerr << suggestHelpMsg;
435 std::exit(EXIT_FAILURE);
440 if(variablesMap.count(
"local-energy-pi")) {
441 std::string localEnergyPiNorm = localEnergyPiString;
442 std::transform(localEnergyPiNorm.begin(), localEnergyPiNorm.end(), localEnergyPiNorm.begin(), ::tolower);
443 if(localEnergyPiNorm==
"always") {
445 }
else if(localEnergyPiNorm==
"first-collision")
447 else if(localEnergyPiNorm==
"never")
450 std::cerr <<
"Unrecognized local-energy-pi type. Must be one of:" << std::endl
451 <<
" always" << std::endl
452 <<
" first-collision" << std::endl
453 <<
" never (default)" << std::endl;
454 std::cerr << suggestHelpMsg;
455 std::exit(EXIT_FAILURE);
460 if(variablesMap.count(
"de-excitation")) {
461 std::string deExcitationNorm = deExcitationString;
462 std::transform(deExcitationNorm.begin(),
463 deExcitationNorm.end(),
464 deExcitationNorm.begin(), ::tolower);
465 if(deExcitationNorm==
"none")
467 #ifdef INCL_DEEXCITATION_ABLAXX
468 else if(deExcitationNorm==
"ablav3p")
469 deExcitationType = DeExcitationABLAv3p;
471 #ifdef INCL_DEEXCITATION_ABLA07
472 else if(deExcitationNorm==
"abla07")
473 deExcitationType = DeExcitationABLA07;
475 #ifdef INCL_DEEXCITATION_SMM
476 else if(deExcitationNorm==
"smm")
477 deExcitationType = DeExcitationSMM;
479 #ifdef INCL_DEEXCITATION_GEMINIXX
480 else if(deExcitationNorm==
"geminixx")
481 deExcitationType = DeExcitationGEMINIXX;
484 std::cerr <<
"Unrecognized de-excitation model. "
485 <<
"Must be one of:" << std::endl
486 <<
" none (default)" << std::endl
487 #ifdef INCL_DEEXCITATION_ABLAXX
488 <<
" ABLAv3p" << std::endl
490 #ifdef INCL_DEEXCITATION_ABLA07
491 <<
" ABLA07" << std::endl
493 #ifdef INCL_DEEXCITATION_SMM
494 <<
" SMM" << std::endl
496 #ifdef INCL_DEEXCITATION_GEMINIXX
497 <<
" GEMINIXX" << std::endl
500 std::cerr << suggestHelpMsg;
501 std::exit(EXIT_FAILURE);
508 if(variablesMap.count(
"cluster-algorithm")) {
509 std::string clusterAlgorithmNorm = clusterAlgorithmString;
510 std::transform(clusterAlgorithmNorm.begin(),
511 clusterAlgorithmNorm.end(),
512 clusterAlgorithmNorm.begin(), ::tolower);
513 if(clusterAlgorithmNorm==
"none")
515 else if(clusterAlgorithmNorm==
"intercomparison")
518 std::cerr <<
"Unrecognized cluster algorithm. "
519 <<
"Must be one of:" << std::endl
520 <<
" intercomparison (default)" << std::endl
521 <<
" none" << std::endl;
522 std::cerr << suggestHelpMsg;
523 std::exit(EXIT_FAILURE);
530 if(variablesMap.count(
"cluster-max-mass") && clusterMaxMass < 2 && clusterMaxMass > 12) {
531 std::cerr <<
"Maximum cluster mass outside the allowed range. Must be between 2 and 12 (included)"
534 std::exit(EXIT_FAILURE);
538 if(variablesMap.count(
"separation-energies")) {
539 std::string separationEnergyNorm = separationEnergyString;
540 std::transform(separationEnergyNorm.begin(),
541 separationEnergyNorm.end(),
542 separationEnergyNorm.begin(), ::tolower);
543 if(separationEnergyNorm==
"incl")
545 else if(separationEnergyNorm==
"real")
547 else if(separationEnergyNorm==
"real-light")
550 std::cerr <<
"Unrecognized separation-energies option. "
551 <<
"Must be one of:" << std::endl
552 <<
" INCL (default)" << std::endl
553 <<
" real" << std::endl
554 <<
" real-light" << std::endl;
555 std::cerr << suggestHelpMsg;
556 std::exit(EXIT_FAILURE);
563 if(!variablesMap.count(
"output") && isFullRun) {
565 if(variablesMap.count(
"input-file"))
566 outputFileRoot = inputFileName;
568 std::stringstream outputFileRootStream;
569 outputFileRootStream.precision(0);
570 outputFileRootStream.setf(std::ios::fixed, std::ios::floatfield);
571 outputFileRootStream <<
574 projectileKineticEnergy;
577 typedef boost::program_options::variables_map::const_iterator BPOVMIter;
578 for(BPOVMIter i=variablesMap.begin(); i!=variablesMap.end(); ++i) {
579 std::string
const &
name = i->first;
581 if(name!=
"projectile"
584 && name!=
"number-shots"
585 && name!=
"random-seed-1"
586 && name!=
"random-seed-2"
587 && name!=
"inclxx-datafile-path"
588 #ifdef INCL_DEEXCITATION_ABLA07
589 && name!=
"abla07-datafile-path"
591 #ifdef INCL_DEEXCITATION_ABLAXX
592 && name!=
"ablav3p-cxx-datafile-path"
594 #ifdef INCL_DEEXCITATION_GEMINIXX
595 && name!=
"geminixx-datafile-path"
598 boost::program_options::variable_value
v = i->second;
600 const std::type_info &type = v.value().type();
601 if(type==
typeid(std::string))
602 outputFileRootStream <<
"_" << name <<
"=" << v.as<std::string>();
604 outputFileRootStream <<
"_" << name <<
"=" << v.as<
G4float>();
605 else if(type==
typeid(
G4int))
606 outputFileRootStream <<
"_" << name <<
"=" << v.as<
G4int>();
607 else if(type==
typeid(
G4bool))
608 outputFileRootStream <<
"_" << name <<
"=" << v.as<
G4bool>();
613 outputFileRoot = outputFileRootStream.str();
618 if(!variablesMap.count(
"logfile"))
619 logFileName = outputFileRoot +
".log";
622 catch(std::exception&
e)
624 std::cerr << e.what() <<
"\n";
625 std::cerr << suggestHelpMsg;
626 std::exit(EXIT_FAILURE);
643 title =
"INCL default run title";
645 naturalTarget =
false;
646 projectileString =
"proton";
648 projectileKineticEnergy = 1000.0;
652 pauliString =
"strict-statistical";
655 coulombString =
"non-relativistic";
657 potentialString =
"isospin-energy";
659 pionPotential =
true;
660 localEnergyBBString =
"first-collision";
662 localEnergyPiString =
"first-collision";
664 deExcitationString =
"none";
666 clusterAlgorithmString =
"intercomparison";
669 backToSpectator =
true;
670 useRealMasses =
true;
671 impactParameter = -1.;
672 separationEnergyString =
"INCL";
677 std::stringstream message;
678 message <<
"INCL++ version " <<
getVersionID() << std::endl;
682 message <<
"Projectile: composite, A=" << projectileSpecies.
theA <<
", Z=" << projectileSpecies.
theZ << std::endl;
683 message <<
" energy = " << projectileKineticEnergy << std::endl;
684 if(targetSpecies.
theA>0)
685 message <<
"Target: A = " << targetSpecies.
theA <<
" Z = " << targetSpecies.
theZ << std::endl;
687 message <<
"Target: natural isotopic composition, Z = " << targetSpecies.
theZ << std::endl;
688 message <<
"Number of requested shots = " << nShots << std::endl;
689 return message.str();
693 std::stringstream ss;
694 ss << std::boolalpha;
695 ss <<
"###########################" << std::endl
696 <<
"### Start of input echo ###" << std::endl
697 <<
"###########################" << std::endl << std::endl
698 <<
" # You may re-use this snippet of the log file as an input file!" << std::endl
699 <<
" # Options marked with a * are compulsory." << std::endl
701 <<
"# Run options" << std::endl
702 <<
"title = " << title <<
"\t# run title" << std::endl
703 <<
"output = " << outputFileRoot <<
"\t# root for generating output file names. Suffixes (.root, .out, etc.) will be appended to this root. Defaults to the input file name, if given; otherwise, defaults to a string composed of the explicitly specified options" << std::endl
704 <<
"logfile = " << logFileName <<
"\t# log file name. Defaults to `<output_root>.log'. Use `-' if you want to redirect logging to stdout" << std::endl
705 <<
"number-shots = " << nShots <<
"\t# * number of shots" << std::endl
706 <<
"inclxx-datafile-path = " << INCLXXDataFilePath << std::endl
707 #ifdef INCL_DEEXCITATION_ABLAXX
708 <<
"ablav3p-cxx-datafile-path = " << ablav3pCxxDataFilePath << std::endl
710 #ifdef INCL_DEEXCITATION_ABLA07
711 <<
"abla07-datafile-path = " << abla07DataFilePath << std::endl
713 #ifdef INCL_DEEXCITATION_GEMINIXX
714 <<
"geminixx-datafile-path = " << geminixxDataFilePath << std::endl
716 << std::endl <<
"# Projectile and target definitions" << std::endl
717 <<
"target = " << targetString <<
"\t# * target nuclide. Can be specified as Fe56, 56Fe, Fe-56, 56-Fe, Fe_56, 56_Fe or Fe. If the mass number is omitted, natural target composition is assumed." << std::endl
718 <<
" " <<
"# the target nuclide was parsed as Z=" << targetSpecies.
theZ;
719 if(targetSpecies.
theA>0)
720 ss <<
", A=" << targetSpecies.
theA;
722 ss <<
", natural target";
724 <<
"projectile = " << projectileString <<
"\t# * projectile name (proton, neutron, pi+, pi0, pi-, d, t, a, He-4...)" << std::endl
725 <<
" " <<
"# the projectile nuclide was parsed as Z=" << projectileSpecies.
theZ <<
", A=" << projectileSpecies.
theA << std::endl
726 <<
"energy = " << projectileKineticEnergy <<
"\t# * total kinetic energy of the projectile, in MeV" << std::endl
727 << std::endl <<
"# Physics options " << std::endl
728 <<
"pauli = " << pauliString <<
"\t# Pauli-blocking algorithm. Must be one of: strict-statistical (default), strict, statistical, global, none" << std::endl
729 <<
"cdpp = " <<
CDPP <<
"\t# whether to apply CDPP after collisions" << std::endl
730 <<
"coulomb = " << coulombString <<
"\t# Coulomb-distortion algorithm. Must be one of: non-relativistic (default), none" << std::endl
731 <<
"potential = " << potentialString <<
"\t# nucleon potential. Must be one of: isospin-energy-smooth, isospin-energy (default), isospin, constant" << std::endl
732 <<
"pion-potential = " << pionPotential <<
"\t# whether to use a pion potential" << std::endl
733 <<
"local-energy-BB = " << localEnergyBBString <<
"\t# local energy in baryon-baryon collisions. Must be one of: always, first-collision (default), never" << std::endl
734 <<
"local-energy-pi = " << localEnergyPiString <<
"\t# local energy in pi-N collisions and in delta decays. Must be one of: always, first-collision (default), never" << std::endl
735 <<
"de-excitation = " << deExcitationString <<
"\t # which de-excitation model to use. Must be one of:"
737 #ifdef INCL_DEEXCITATION_ABLAXX
740 #ifdef INCL_DEEXCITATION_ABLA07
743 #ifdef INCL_DEEXCITATION_SMM
746 #ifdef INCL_DEEXCITATION_GEMINIXX
750 <<
"cluster-algorithm = " << clusterAlgorithmString <<
"\t# clustering algorithm for production of composites. Must be one of: intercomparison (default), none" << std::endl
751 <<
"cluster-max-mass = " << clusterMaxMass <<
"\t# maximum mass of produced composites. Must be between 2 and 12 (included)" << std::endl
752 <<
"back-to-spectator = " << backToSpectator <<
"\t# whether to use back-to-spectator" << std::endl
753 <<
"use-real-masses = " << useRealMasses <<
"\t# whether to use real masses for the outgoing particle energies" << std::endl
754 <<
"separation-energies = " << separationEnergyString <<
"\t# how to assign the separation energies of the INCL nucleus. Must be one of: INCL (default), real, real-light" << std::endl
755 << std::endl <<
"# Technical options " << std::endl
756 <<
"verbosity = " << verbosity <<
"\t# from 0 (quiet) to 10 (most verbose)" << std::endl
757 <<
"verbose-event = " << verboseEvent <<
"\t# request verbose logging for the specified event only" << std::endl
758 <<
"random-seed-1 = " << randomSeed1 <<
"\t# first seed for the random-number generator" << std::endl
759 <<
"random-seed-2 = " << randomSeed2 <<
"\t# second seed for the random-number generator" << std::endl
760 << std::endl <<
"#########################" << std::endl
761 <<
"### End of input echo ###" << std::endl
762 <<
"#########################" << std::endl;