Files
2025-12-05 08:54:02 +01:00

559 lines
18 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
// Alain Boudard, CEA-Saclay, France
// Joseph Cugnon, University of Liege, Belgium
// Jean-Christophe David, CEA-Saclay, France
// Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
// Sylvie Leray, CEA-Saclay, France
// Davide Mancusi, CEA-Saclay, France
//
#define INCLXX_IN_GEANT4_MODE 1
#include "globals.hh"
#ifndef G4INCLConfig_hh
#define G4INCLConfig_hh 1
#include "G4INCLParticleSpecies.hh"
#include "G4INCLConfigEnums.hh"
#include "G4INCLRandomSeedVector.hh"
#include <iostream>
#include <string>
#include <sstream>
// #include <cassert>
class ConfigParser;
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();
/// \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 Get the target strangess number.
G4int getTargetS() const { return targetSpecies.theS; }
/// \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 Set target strangess number
void setTargetS(G4int S) { targetSpecies.theS = S; }
/// \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 &pars) { projectileSpecies=pars; }
/// \brief Get the projectile kinetic energy.
G4double getProjectileKineticEnergy() const { return projectileKineticEnergy; }
/// \brief Set the projectile kinetic energy.
void setProjectileKineticEnergy(G4double 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 INCL version hash.
static std::string const getVersionHash();
/// \brief Get the INCL version string.
static std::string const getVersionString() {
std::stringstream ss;
ss << getVersionID() << "-" << getVersionHash();
return ss.str();
}
/// \brief Get the seeds for the random-number generator.
Random::SeedVector getRandomSeeds() const {
return randomSeedVector;
}
/// \brief Get the Pauli-blocking algorithm.
PauliType getPauliType() const { return pauliType; }
/// \brief Do we want CDPP?
G4bool getCDPP() const { return CDPP; }
/// \brief Get the Coulomb-distortion algorithm.
CoulombType getCoulombType() const { return coulombType; }
/// \brief Set the Coulomb-distortion algorithm.
void setCoulombType(CoulombType const c) { coulombType = c; }
/// \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 Do we want the pion potential?
G4bool getPionPotential() const { return pionPotential; }
/// \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 Set the type of local energy for N-N avatars.
void setLocalEnergyBBType(const LocalEnergyType t) { localEnergyBBType=t; }
/// \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 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 de-excitation string.
std::string getDeExcitationString() const { return deExcitationString; }
/// \brief Get the clustering algorithm.
ClusterAlgorithmType getClusterAlgorithm() const { return clusterAlgorithmType; }
/// \brief Set the clustering algorithm.
void setClusterAlgorithm(ClusterAlgorithmType const c) { clusterAlgorithmType = c; }
/// \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 clm){ clusterMaxMass=clm; }
/// \brief Get back-to-spectator
G4bool getBackToSpectator() const { return backToSpectator; }
/// \brief Set back-to-spectator
void setBackToSpectator(const G4bool b) { backToSpectator = b; }
/// \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 Set the INCLXX datafile path
void setINCLXXDataFilePath(std::string const &path) { INCLXXDataFilePath=path; }
/// \brief Set the ABLAXX datafile path
#ifdef INCL_DEEXCITATION_ABLAXX
void setABLAXXDataFilePath(std::string const &path) { ablaxxDataFilePath=path; }
G4double getFissionDispCoeff() const { return fissdisscoeff; }
G4double getLevDensAv() const { return levdensav; }
G4double getLevDensAs() const { return levdensas; }
G4double getLevDensAk() const { return levdensak; }
G4double getTempFreezeOut() const { return tfreezeout; }
G4float getEmissionBarrierFactorH2() const { return barrierfactorh2; }
G4float getEmissionBarrierFactorH3() const { return barrierfactorh3; }
G4float getEmissionBarrierFactorHe3() const { return barrierfactorhe3; }
G4float getEmissionBarrierFactorHe4() const { return barrierfactorhe4; }
G4float getEmissionBarrierFactorHe6() const { return barrierfactorhe6; }
#endif
std::string const &getINCLXXDataFilePath() const {
return INCLXXDataFilePath;
}
#ifdef INCL_DEEXCITATION_ABLAXX
std::string const &getABLAXXDataFilePath() const {
return ablaxxDataFilePath;
}
#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; }
/// \brief Get the Fermi-momentum type
FermiMomentumType getFermiMomentumType() const { return fermiMomentumType; }
/// \brief Set the Fermi-momentum type
void setFermiMomentumType(FermiMomentumType const f) { fermiMomentumType=f; }
/// \brief Get the Fermi momentum
G4double getFermiMomentum() const { return fermiMomentum; }
/// \brief Set the Fermi momentum
void setFermiMomentum(const G4double p) { fermiMomentum = p; }
G4double getCutNN() const { return cutNN; }
#ifdef INCL_ROOT_USE
std::string const &getROOTSelectionString() const {
return rootSelectionString;
}
#endif
#ifdef INCL_DEEXCITATION_FERMI_BREAKUP
G4int getMaxMassFermiBreakUp() const {
return maxMassFermiBreakUp;
}
G4int getMaxChargeFermiBreakUp() const {
return maxChargeFermiBreakUp;
}
#endif
/// \brief Get the r-p correlation coefficient
G4double getRPCorrelationCoefficient(const ParticleType t) const {
// assert(t==Proton || t==Neutron);
return ((t==Proton) ? rpCorrelationCoefficientProton : rpCorrelationCoefficientNeutron);
}
/// \brief Set the r-p correlation coefficient
void setRPCorrelationCoefficient(const ParticleType t, const G4double corrCoeff) {
// assert(t==Proton || t==Neutron);
if(t==Proton)
rpCorrelationCoefficientProton=corrCoeff;
else
rpCorrelationCoefficientNeutron=corrCoeff;
}
/// \brief Set the r-p correlation coefficient
void setRPCorrelationCoefficient(const G4double corrCoeff) {
setRPCorrelationCoefficient(Proton,corrCoeff);
setRPCorrelationCoefficient(Neutron,corrCoeff);
}
/// \brief Get the neutron-skin thickness
G4double getNeutronSkin() const { return neutronSkin; }
/// \brief Set the neutron-skin thickness
void setNeutronSkin(const G4double d) { neutronSkin=d; }
/// \brief Get the neutron-halo size
G4double getNeutronHalo() const { return neutronHalo; }
/// \brief Set the neutron-halo size
void setNeutronHalo(const G4double d) { neutronHalo=d; }
/// \brief True if we should use refraction
G4bool getRefraction() const { return refraction; }
/// \brief Set the refraction variable
void setRefraction(const G4bool r) { refraction = r; }
/// \brief Get the RNG type
RNGType getRNGType() const { return rngType; }
/// \brief Set the RNG type
void setRNGType(RNGType const r) { rngType=r; }
/// \brief Get the phase-space-generator type
PhaseSpaceGeneratorType getPhaseSpaceGeneratorType() const { return phaseSpaceGeneratorType; }
/// \brief Set the phase-space-generator type
void setPhaseSpaceGeneratorType(PhaseSpaceGeneratorType const p) { phaseSpaceGeneratorType=p; }
/// \brief Get the cascade-action type
CascadeActionType getCascadeActionType() const { return cascadeActionType; }
/// \brief Set the cascade-action type
void setCascadeActionType(CascadeActionType const c) { cascadeActionType=c; }
/// \brief Get the autosave frequency
unsigned int getAutosaveFrequency() const { return autosaveFrequency; }
/// \brief Set the autosave frequency
void setAutosaveFrequency(const unsigned int f) { autosaveFrequency=f; }
/// \brief Get the Cross Section type
CrossSectionsType getCrossSectionsType() const { return crossSectionsType; }
/// \brief Get the maximum number of pions for multipion collisions
G4int getMaxNumberMultipions() const { return maxNumberMultipions; }
/// \brief Set the maximum number of pions for multipion collisions
void setMaxNumberMultipions(const G4int n) { maxNumberMultipions=n; }
/// \brief Set the Cross Section type
void setCrossSectionsType(CrossSectionsType const c) { crossSectionsType=c; }
/// \brief Get the hadronization time
G4double getHadronizationTime() const { return hadronizationTime; }
/// \brief Set the hadronization time
void setHadronizationTime(const G4double t) { hadronizationTime=t; }
#ifdef INCL_ROOT_USE
G4bool getConciseROOTTree() const { return conciseROOTTree; }
#endif
G4bool getInverseKinematics() const { return inverseKinematics; }
G4bool getsrcPairConfig() const { return srcPairCorrelations; }
G4float getsrcPairDist() const { return srcPairDistance; }
/// \brief Get the decay time threshold time
G4double getDecayTimeThreshold() const { return decayTimeThreshold; }
/// \brief Set decay time threshold time
void setDecayTimeThreshold(const G4double t) { decayTimeThreshold=t; }
/// \brief Get the bias
G4double getBias() const { return bias; }
/// \brief Get the pbar at rest annihilation threshold
G4double getAtrestThreshold() const { return atrestThreshold; }
/// \brief Set the pbar at rest annihilation threshold
void setAtrestThreshold(const G4double t) { atrestThreshold=t; }
/// \brief Get the nbar at rest annihilation threshold
G4double getnbAtrestThreshold() const {return nbatrestThreshold;}
/// \brief Set the nbar at rest annihilation threshold
void setnbAtrestThreshold(const G4double t){ nbatrestThreshold=t;}
/// \brief Get the dbar at rest annihilation threshold
G4double getdbAtrestThreshold() const {return dbatrestThreshold;}
/// \brief Set the dbar at rest annihilation threshold
void setdbAtrestThreshold(const G4double t){ dbatrestThreshold=t;}
private:
G4int verbosity;
std::string inputFileName;
std::string title;
std::string outputFileRoot;
std::string fileSuffix;
std::string logFileName;
G4int nShots;
std::string targetString;
ParticleSpecies targetSpecies;
G4bool naturalTarget;
std::string projectileString;
ParticleSpecies projectileSpecies;
G4double projectileKineticEnergy;
G4int verboseEvent;
std::string randomSeeds;
Random::SeedVector randomSeedVector;
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 deExcitationModelList;
std::string deExcitationOptionDescription;
std::string deExcitationString;
DeExcitationType deExcitationType;
#ifdef INCL_DEEXCITATION_ABLAXX
std::string ablaxxDataFilePath;
G4double fissdisscoeff;
G4double levdensav;
G4double levdensas;
G4double levdensak;
G4double tfreezeout;
G4float barrierfactorh2;
G4float barrierfactorh3;
G4float barrierfactorhe3;
G4float barrierfactorhe4;
G4float barrierfactorhe6;
#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;
std::string fermiMomentumString;
FermiMomentumType fermiMomentumType;
G4double fermiMomentum;
G4double cutNN;
//G4bool ann;
G4double bias;
G4double atrestThreshold;
G4double nbatrestThreshold;
G4double dbatrestThreshold;
#ifdef INCL_ROOT_USE
std::string rootSelectionString;
#endif
#ifdef INCL_DEEXCITATION_FERMI_BREAKUP
G4int maxMassFermiBreakUp;
G4int maxChargeFermiBreakUp;
#endif
G4double rpCorrelationCoefficient;
G4double rpCorrelationCoefficientProton;
G4double rpCorrelationCoefficientNeutron;
G4double neutronSkin;
G4double neutronHalo;
G4bool refraction;
std::string randomNumberGenerator;
RNGType rngType;
std::string phaseSpaceGenerator;
PhaseSpaceGeneratorType phaseSpaceGeneratorType;
unsigned int autosaveFrequency;
std::string crossSectionsString;
CrossSectionsType crossSectionsType;
G4int maxNumberMultipions;
std::string cascadeAction;
CascadeActionType cascadeActionType;
G4double hadronizationTime;
#ifdef INCL_ROOT_USE
G4bool conciseROOTTree;
#endif
G4bool inverseKinematics;
G4bool srcPairCorrelations;
G4float srcPairDistance;
G4double decayTimeThreshold;
friend class ::ConfigParser;
};
}
#endif