80 G4double RMSMotherMoleculeDisplacement = 0;
84 RMSMotherMoleculeDisplacement = 2.0 *
nanometer;
88 RMSMotherMoleculeDisplacement = 0. *
nanometer;
92 RMSMotherMoleculeDisplacement = 0. *
nanometer;
96 RMSMotherMoleculeDisplacement = 2.0 *
nanometer;
100 RMSMotherMoleculeDisplacement = 0. *
nanometer;
103 if (RMSMotherMoleculeDisplacement == 0)
108 RMSMotherMoleculeDisplacement);
110 return RandDirection;
118 vector<G4ThreeVector> theProductDisplacementVector(nbProducts);
120 typedef map<const G4MoleculeDefinition*, G4double> RMSmap;
145 for(
int i = 0; i < nbProducts; i++)
151 if(theRMSDisplacement==0)
158 theProductDisplacementVector[i] = RandDirection;
169 for(
G4int i =0; i < nbProducts; i++)
174 theProductDisplacementVector[i] = -1./18.*RandDirection;
178 theProductDisplacementVector[i] = +17./18.*RandDirection;
190 for(
G4int i =0; i < nbProducts; i++)
195 theProductDisplacementVector[i] = -2./18.*RandDirection;
206 OHDisplacement = 1./2.*OHDisplacement;
210 OHDisplacement = -1./2.*OHDisplacement;
213 theProductDisplacementVector[i] = OHDisplacement + OxygenDisplacement;
240 for(
G4int i =0; i < nbProducts; i++)
246 if(theRMSDisplacement==0)
253 theProductDisplacementVector[i] = RandDirection;
269 for(
G4int i =0; i < nbProducts; i++)
274 theProductDisplacementVector[i] = -2./18.*RandDirection;
285 OHDisplacement = 1./2.*OHDisplacement;
289 OHDisplacement = -1./2.*OHDisplacement;
292 theProductDisplacementVector[i] = OHDisplacement + OxygenDisplacement;
299 return theProductDisplacementVector;
307 G4double expectationValue = 2. * sqrt(2. / 3.14) * sigma;
309 G4double XValueForfMax = sqrt(2. * sigma * sigma);
310 G4double fMaxValue = sqrt(2. / 3.14) * 1. / (sigma * sigma * sigma)
311 * (XValueForfMax * XValueForfMax)
312 * exp(-1. / 2. * (XValueForfMax * XValueForfMax) / (sigma * sigma));
331 G4double f = sqrt(2./3.14) * 1/pow(sigma, 3) * R*R * exp(-1./2. * R*R/(sigma*sigma));
333 if(aRandomfValue < f)
344 G4double xDirection = R * cos(phi) * sin(theta);
345 G4double yDirection = R * sin(theta) * sin(phi);
347 G4ThreeVector RandDirection(xDirection, yDirection, zDirection);
349 return RandDirection;
361 G4double fMaxValue = 4. * XValueForfMax * exp(-2. * XValueForfMax);
382 if(aRandomfValue < f)
395 G4double xDirection = Rnano * cos(phi) * sin(theta);
396 G4double yDirection = Rnano * sin(theta) * sin(phi);
397 G4double zDirection = Rnano * costheta;
398 G4ThreeVector RandDirection(xDirection, yDirection, zDirection);
400 return RandDirection;
static G4DLLIMPORT const DisplacementType AutoIonisation
static G4DLLIMPORT const DisplacementType B1A1_DissociationDecay
static G4Electron_aq * Definition()
static G4DLLIMPORT const DisplacementType A1B1_DissociationDecay
CLHEP::Hep3Vector G4ThreeVector
static G4DLLIMPORT const DisplacementType Ionisation_DissociationDecay
static const double nanometer
G4ThreeVector radialDistributionOfElectron() const
virtual ~G4DNAWaterDissociationDisplacer()
G4int GetNbProducts() const
G4ThreeVector radialDistributionOfProducts(G4double) const
static G4DLLIMPORT const DisplacementType DissociativeAttachment
G4GLOB_DLL std::ostream G4cout
DisplacementType GetDisplacementType() const
static G4H3O * Definition()
G4DNAWaterDissociationDisplacer()
const G4MoleculeDefinition * GetDefinition() const
Get molecule definition.
static DisplacementType AddDisplacement()
const G4Molecule * GetProduct(int) const
static G4OH * Definition()
Class Description The dynamic molecule holds all the data that change for a molecule It has a pointer...
static G4H2 * Definition()
virtual G4ThreeVector GetMotherMoleculeDisplacement(const G4MolecularDissociationChannel *) const
G4int sign(const T t)
A simple sign function that allows us to port fortran code to c++ more easily.
virtual std::vector< G4ThreeVector > GetProductsDisplacement(const G4MolecularDissociationChannel *) const
static G4Hydrogen * Definition()