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)