170theDecayChannel)
const
173 G4double RMSMotherMoleculeDisplacement(0.);
177 case Ionisation_DissociationDecay:
178 RMSMotherMoleculeDisplacement = 2.0 * nanometer;
180 case A1B1_DissociationDecay:
181 RMSMotherMoleculeDisplacement = 0. * nanometer;
183 case B1A1_DissociationDecay:
184 RMSMotherMoleculeDisplacement = 0. * nanometer;
186 case B1A1_DissociationDecay2:
187 RMSMotherMoleculeDisplacement = 0. * nanometer;
190 RMSMotherMoleculeDisplacement = 2.0 * nanometer;
192 case DissociativeAttachment:
193 RMSMotherMoleculeDisplacement = 0. * nanometer;
197 if (RMSMotherMoleculeDisplacement == 0)
204 return RandDirection;
214 vector<G4ThreeVector> theProductDisplacementVector(nbProducts);
216 typedef map<const G4MoleculeDefinition*, G4double> RMSmap;
223 case Ionisation_DissociationDecay:
247 for (
int i = 0; i < nbProducts; i++)
250 G4double theRMSDisplacement = theRMSmap[pProduct->GetDefinition()];
252 if (theRMSDisplacement == 0.)
259 theProductDisplacementVector[i] = RandDirection;
264 case A1B1_DissociationDecay:
271 G4double theRMSDisplacement = 2.4 * nanometer;
275 for (
G4int i = 0; i < nbProducts; i++)
281 theProductDisplacementVector[i] = -1. / 18. * RandDirection;
285 theProductDisplacementVector[i] = +17. / 18. * RandDirection;
290 case B1A1_DissociationDecay:
298 G4double theRMSDisplacement = 0.8 * nanometer;
303 for (
G4int i = 0; i < nbProducts; ++i)
306 if (pProduct->GetDefinition() == G4H2::Definition())
312 theProductDisplacementVector[i] = -16. / 18. * RandDirection;
320 G4ThreeVector OxygenDisplacement = +2. / 18. * RandDirection;
321 G4double OHRMSDisplacement = 1.1 * nanometer;
323 auto OHDisplacement =
328 OHDisplacement = 0.5 * OHDisplacement;
332 OHDisplacement = -0.5 * OHDisplacement;
335 theProductDisplacementVector[i] =
336 OHDisplacement + OxygenDisplacement;
343 case B1A1_DissociationDecay2:
351 for(
G4int i =0; i < nbProducts; ++i)
360 G4double HRMSDisplacement = 1.6 * nanometer;
365 if(NbOfH==0) HDisplacement = 0.5*HDisplacement;
366 else HDisplacement = -0.5*HDisplacement;
367 theProductDisplacementVector[i] = HDisplacement;
399 for (
G4int i = 0; i < nbProducts; i++)
402 auto theRMSDisplacement = theRMSmap[pProduct->GetDefinition()];
404 if (theRMSDisplacement == 0)
412 theProductDisplacementVector[i] = RandDirection;
421 case DissociativeAttachment:
428 G4double theRMSDisplacement = 0.8 * nanometer;
433 for (
G4int i = 0; i < nbProducts; ++i)
436 if (pProduct->GetDefinition() == G4H2::Definition())
442 theProductDisplacementVector[i] = -16. / 18. * RandDirection;
450 G4ThreeVector OxygenDisplacement = +2. / 18. * RandDirection;
451 G4double OHRMSDisplacement = 1.1 * nanometer;
453 auto OHDisplacement =
458 OHDisplacement = 0.5 * OHDisplacement;
462 OHDisplacement = -0.5 * OHDisplacement;
464 theProductDisplacementVector[i] = OHDisplacement +
472 return theProductDisplacementVector;