61                 Ionisation_DissociationDecay)
 
   63                 A1B1_DissociationDecay)
 
   65                 B1A1_DissociationDecay)
 
   69                 DissociativeAttachment)
 
   72 #ifdef _WATER_DISPLACER_USE_KREIPL_ 
   82   return (2.*r+1.)*
G4Exp(-2.*r);
 
   87 #ifdef _WATER_DISPLACER_USE_TERRISOL_ 
   98 #define b 27.22 //*nanometer 
   99   static constexpr 
double sqrt_pi=1.77245; 
 
  100   static constexpr 
double b_to3 = 20168.1; 
 
  101   static constexpr 
double b_to2 = 740.928; 
 
  102   static constexpr 
double inverse_b_to2 = 1./b_to2;
 
  104   static constexpr 
double main_factor=4./(sqrt_pi*b_to3);
 
  105   static constexpr 
double factorA=sqrt_pi*b_to3/4.;
 
  106   static constexpr 
double factorB=b_to2/2.;
 
  110             - factorB*r*
G4Exp(-pow(r,2.)*inverse_b_to2)));
 
  117 #ifdef _WATER_DISPLACER_USE_KREIPL_
 
  118     fFastElectronDistrib(0., 5., 0.001)
 
  120     fFastElectronDistrib(0., 100., 0.001)
 
  126                 std::placeholders::_1);
 
  129   fElectronThermalization.reserve(nBins);
 
  130   double eps = 1./((
int)nBins);
 
  133   fElectronThermalization.push_back(0.);
 
  135   for(
size_t i = 1 ; i < nBins ; ++i){
 
  136     double r = fFastElectronDistrib.Revert(proba, fProba1DFunction);
 
  137     fElectronThermalization.push_back(r*
nanometer);
 
  154                               theDecayChannel)
 const 
  157   G4double RMSMotherMoleculeDisplacement(0.);
 
  160     case Ionisation_DissociationDecay:
 
  161       RMSMotherMoleculeDisplacement = 2.0 * 
nanometer;
 
  163     case A1B1_DissociationDecay:
 
  164       RMSMotherMoleculeDisplacement = 0. * 
nanometer;
 
  166     case B1A1_DissociationDecay:
 
  167       RMSMotherMoleculeDisplacement = 0. * 
nanometer;
 
  170       RMSMotherMoleculeDisplacement = 2.0 * 
nanometer;
 
  172     case DissociativeAttachment:
 
  173       RMSMotherMoleculeDisplacement = 0. * 
nanometer;
 
  177   if(RMSMotherMoleculeDisplacement == 0){
 
  183   return RandDirection;
 
  188 vector<G4ThreeVector>
 
  191                         theDecayChannel)
 const 
  194   vector<G4ThreeVector> theProductDisplacementVector(nbProducts);
 
  196   typedef map<const G4MoleculeDefinition*, G4double> RMSmap;
 
  202     case Ionisation_DissociationDecay:
 
  223       for(
int i = 0; i < nbProducts; i++){
 
  227         if(theRMSDisplacement==0.){
 
  232           theProductDisplacementVector[i] = RandDirection;
 
  237     case A1B1_DissociationDecay:
 
  247       for(
G4int i =0; i < nbProducts; i++){
 
  252           theProductDisplacementVector[i] = -1./18.*RandDirection;
 
  256           theProductDisplacementVector[i] = +17./18.*RandDirection;
 
  261     case B1A1_DissociationDecay:
 
  273       for(
G4int i =0; i < nbProducts; ++i)
 
  278           theProductDisplacementVector[i] = -2./18.*RandDirection;
 
  285           auto OHDisplacement =
 
  289             OHDisplacement = 0.5*OHDisplacement;
 
  292             OHDisplacement = -0.5*OHDisplacement;
 
  295           theProductDisplacementVector[i] =
 
  296           OHDisplacement + OxygenDisplacement;
 
  325       for(
G4int i =0; i < nbProducts; i++){
 
  327         auto theRMSDisplacement = theRMSmap[product->
GetDefinition()];
 
  329         if(theRMSDisplacement==0){
 
  335           theProductDisplacementVector[i] = RandDirection;
 
  343     case DissociativeAttachment:
 
  354       for(
G4int i =0; i < nbProducts; ++i){
 
  357           theProductDisplacementVector[i] = -2./18.*RandDirection;
 
  363           auto OHDisplacement =
 
  367             OHDisplacement = 0.5*OHDisplacement;
 
  370             OHDisplacement = -0.5*OHDisplacement;
 
  372           theProductDisplacementVector[i] = OHDisplacement +
 
  380   return theProductDisplacementVector;
 
  389   static const double inverse_sqrt_3 = 1./sqrt(3.);
 
  390   double sigma = Rrms*inverse_sqrt_3;
 
  403   size_t nBins = fElectronThermalization.size();
 
  404   size_t bin = size_t(floor(rand_value*nBins));
 
  405   size_t bin_p1 = 
min(bin+1,nBins-1);
 
  407   return (fElectronThermalization[bin]*(1.-rand_value)
 
  408           + fElectronThermalization[bin_p1]*rand_value)*
 
ThreeVector shoot(const G4int Ap, const G4int Af)
static G4Electron_aq * Definition()
CLHEP::Hep3Vector G4ThreeVector
G4ThreeVector radialDistributionOfElectron() const 
virtual ~G4DNAWaterDissociationDisplacer()
G4ThreeVector G4RandomDirection()
static constexpr double nanometer
static const G4double eps
G4int GetNbProducts() const 
G4GLOB_DLL std::ostream G4cout
DisplacementType GetDisplacementType() const 
static G4double ElectronProbaDistribution(G4double r)
G4MolecularConfiguration * GetProduct(int) const 
static G4H3O * Definition()
G4DNAWaterDissociationDisplacer()
typedef int(XMLCALL *XML_NotStandaloneHandler)(void *userData)
#define _WATER_DISPLACER_USE_TERRISOL_
G4double G4Exp(G4double initial_x)
Exponential Function double precision. 
const G4String & GetName() const 
std::vector< G4ThreeVector > GetProductsDisplacement(const G4MolecularDissociationChannel *) const override
T min(const T t1, const T t2)
brief Return the smallest of the two arguments 
const G4MoleculeDefinition * GetDefinition() const 
G4ThreeVector GetMotherMoleculeDisplacement(const G4MolecularDissociationChannel *) const override
static G4OH * Definition()
static G4H2 * Definition()
G4ThreeVector radialDistributionOfProducts(G4double r_rms) const 
static G4Hydrogen * Definition()
#define G4CT_COUNT_IMPL(enumName, flagName)