Files
geant4/source/processes/hadronic/models/inclxx/utils/include/G4INCLConfig.hh
T
2016-06-09 17:01:34 +02:00

302 lines
9.6 KiB
C++

//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// INCL++ intra-nuclear cascade model
// Pekka Kaitaniemi, CEA and Helsinki Institute of Physics
// Davide Mancusi, CEA
// Alain Boudard, CEA
// Sylvie Leray, CEA
// Joseph Cugnon, University of Liege
//
// INCL++ revision: v5.1.8
//
#define INCLXX_IN_GEANT4_MODE 1
#include "globals.hh"
#ifndef G4INCLConfig_hh
#define G4INCLConfig_hh 1
#include "G4INCLParticleSpecies.hh"
#include "G4INCLConfigEnums.hh"
#include "G4INCLIRandomGenerator.hh"
#include <iostream>
#include <string>
#include <sstream>
namespace G4INCL {
/**
* The INCL configuration object
*
* The Config object keeps track of various INCL physics options
* (e.g. which Pauli blocking scheme to use, whether to use local
* energy option or not, etc.
*/
class Config {
public:
/// \brief Default constructor
Config();
/**
* Constructor for INCL++ with specified target A, Z, projectile
* type and energy. All other options are the default ones.
*/
Config(G4int, G4int, ParticleSpecies, G4double);
/** \brief Constructor based on command-line and config-file options.
*
* \param argc command-line parameters
* \param argv command-line parameters
* \param isFullRun is this a real calculation: true = yes; false = no, it's just a unit test
*/
Config(G4int argc, char *argv[], G4bool isFullRun);
/// \brief Default destructor
~Config();
/// \brief Initialise the members
void init();
/// \brief Return a summary of the run configuration.
std::string summary();
/// \brief Get the verbosity.
G4int getVerbosity() const { return verbosity; }
/// \brief Get the run title.
std::string const &getCalculationTitle() const { return title; }
/// \brief Get the output file root.
std::string const &getOutputFileRoot() const { return outputFileRoot; }
/// \brief Get the number of shots.
G4int getNumberOfShots() const { return nShots; }
/// \brief Natural targets.
G4bool isNaturalTarget() const { return naturalTarget; }
/** \brief Get the target mass number.
*
* Note that A==0 means natural target. You should first check the
* isNaturalTarget() method.
*/
G4int getTargetA() const { return targetSpecies.theA; }
/// \brief Get the target charge number.
G4int getTargetZ() const { return targetSpecies.theZ; }
/// \brief Set target mass number
void setTargetA(G4int A) { targetSpecies.theA = A; }
/// \brief Set target charge number
void setTargetZ(G4int Z) { targetSpecies.theZ = Z; }
/// \brief Get the projectile type
ParticleType getProjectileType() const { return projectileSpecies.theType; }
/// \brief Get the projectile species
ParticleSpecies getProjectileSpecies() const { return projectileSpecies; }
/// \brief Set the projectile species
void setProjectileSpecies(ParticleSpecies const &ps) { projectileSpecies=ps; }
/// \brief Get the projectile kinetic energy.
G4float getProjectileKineticEnergy() const { return projectileKineticEnergy; }
/// \brief Set the projectile kinetic energy.
void setProjectileKineticEnergy(G4float const kinE) { projectileKineticEnergy=kinE; }
/// \brief Get the number of the verbose event.
G4int getVerboseEvent() const { return verboseEvent; }
/// \brief Get the INCL version ID.
static std::string const getVersionID();
/// \brief Get the seeds for the random-number generator.
SeedVector const getRandomSeeds() const {
SeedVector s;
s.push_back(randomSeed1);
s.push_back(randomSeed2);
return s;
}
/// \brief Get the Pauli-blocking algorithm.
PauliType getPauliType() const { return pauliType; }
/// \brief Do we want CDPP?
G4bool getCDPP() const { return CDPP; }
/// \brief Do we want the pion potential?
G4bool getPionPotential() const { return pionPotential; }
/// \brief Get the Coulomb-distortion algorithm.
CoulombType getCoulombType() const { return coulombType; }
/// \brief Get the type of the potential for nucleons.
PotentialType getPotentialType() const { return potentialType; }
/// \brief Set the type of the potential for nucleons.
void setPotentialType(PotentialType type) { potentialType = type; }
/// \brief Set the type of the potential for nucleons.
void setPionPotential(const G4bool pionPot) { pionPotential = pionPot; }
/// \brief Get the type of local energy for N-N avatars.
LocalEnergyType getLocalEnergyBBType() const { return localEnergyBBType; }
/// \brief Get the type of local energy for pi-N and decay avatars.
LocalEnergyType getLocalEnergyPiType() const { return localEnergyPiType; }
/// \brief Set the type of local energy for N-N avatars.
void setLocalEnergyBBType(const LocalEnergyType t) { localEnergyBBType=t; }
/// \brief Set the type of local energy for N-N avatars.
void setLocalEnergyPiType(const LocalEnergyType t) { localEnergyPiType=t; }
/// \brief Get the log file name.
std::string const &getLogFileName() const { return logFileName; }
/// \brief Get the de-excitation model.
DeExcitationType getDeExcitationType() const { return deExcitationType; }
/// \brief Get the clustering algorithm.
ClusterAlgorithmType getClusterAlgorithm() const { return clusterAlgorithmType; }
/// \brief Get the maximum mass for production of clusters.
G4int getClusterMaxMass() const { return clusterMaxMass; }
/// \brief Set the maximum mass for production of clusters.
void setClusterMaxMass(const G4int m){ clusterMaxMass=m; }
/// \brief Get back-to-spectator
G4bool getBackToSpectator() const { return backToSpectator; }
/// \brief Whether to use real masses
G4bool getUseRealMasses() const { return useRealMasses; }
/// \brief Set whether to use real masses
void setUseRealMasses(G4bool use) { useRealMasses = use; }
/// \brief Echo the input options.
std::string const echo() const;
std::string const &getINCLXXDataFilePath() const {
return INCLXXDataFilePath;
}
#ifdef INCL_DEEXCITATION_ABLAXX
std::string const &getABLAv3pCxxDataFilePath() const {
return ablav3pCxxDataFilePath;
}
#endif
#ifdef INCL_DEEXCITATION_ABLA07
std::string const &getABLA07DataFilePath() const {
return abla07DataFilePath;
}
#endif
#ifdef INCL_DEEXCITATION_GEMINIXX
std::string const &getGEMINIXXDataFilePath() const {
return geminixxDataFilePath;
}
#endif
G4double getImpactParameter() const { return impactParameter; }
/// \brief Get the separation-energy type.
SeparationEnergyType getSeparationEnergyType() const { return separationEnergyType; }
private:
G4int verbosity;
std::string inputFileName;
std::string title;
std::string outputFileRoot;
std::string logFileName;
G4int nShots;
std::string targetString;
ParticleSpecies targetSpecies;
G4bool naturalTarget;
std::string projectileString;
ParticleSpecies projectileSpecies;
G4float projectileKineticEnergy;
G4int verboseEvent;
G4int randomSeed1, randomSeed2;
std::string pauliString;
PauliType pauliType;
G4bool CDPP;
std::string coulombString;
CoulombType coulombType;
std::string potentialString;
PotentialType potentialType;
G4bool pionPotential;
std::string localEnergyBBString;
LocalEnergyType localEnergyBBType;
std::string localEnergyPiString;
LocalEnergyType localEnergyPiType;
std::string deExcitationString;
DeExcitationType deExcitationType;
#ifdef INCL_DEEXCITATION_ABLAXX
std::string ablav3pCxxDataFilePath;
#endif
#ifdef INCL_DEEXCITATION_ABLA07
std::string abla07DataFilePath;
#endif
#ifdef INCL_DEEXCITATION_GEMINIXX
std::string geminixxDataFilePath;
#endif
std::string INCLXXDataFilePath;
std::string clusterAlgorithmString;
ClusterAlgorithmType clusterAlgorithmType;
G4int clusterMaxMass;
G4bool backToSpectator;
G4bool useRealMasses;
G4double impactParameter;
std::string separationEnergyString;
SeparationEnergyType separationEnergyType;
};
}
#endif