Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4DNAWaterDissociationDisplacer Class Reference

#include <G4DNAWaterDissociationDisplacer.hh>

+ Inheritance diagram for G4DNAWaterDissociationDisplacer:

Public Member Functions

 G4DNAWaterDissociationDisplacer ()
 
virtual ~G4DNAWaterDissociationDisplacer ()
 
std::vector< G4ThreeVectorGetProductsDisplacement (const G4MolecularDissociationChannel *) const override
 
G4ThreeVector GetMotherMoleculeDisplacement (const G4MolecularDissociationChannel *) const override
 
G4ThreeVector radialDistributionOfElectron () const
 
G4ThreeVector radialDistributionOfProducts (G4double r_rms) const
 
- Public Member Functions inherited from G4VMolecularDissociationDisplacer
virtual ~G4VMolecularDissociationDisplacer ()=default
 
virtual std::vector< G4ThreeVectorGetProductsDisplacement (const G4MolecularDissociationChannel *) const =0
 
virtual G4ThreeVector GetMotherMoleculeDisplacement (const G4MolecularDissociationChannel *) const =0
 
void SetVerbose (G4int verbose)
 

Static Public Member Functions

static G4double ElectronProbaDistribution (G4double r)
 

Additional Inherited Members

- Protected Member Functions inherited from G4VMolecularDissociationDisplacer
 G4VMolecularDissociationDisplacer ()=default
 
- Protected Attributes inherited from G4VMolecularDissociationDisplacer
G4int fVerbose
 

Detailed Description

Definition at line 57 of file G4DNAWaterDissociationDisplacer.hh.

Constructor & Destructor Documentation

◆ G4DNAWaterDissociationDisplacer()

G4DNAWaterDissociationDisplacer::G4DNAWaterDissociationDisplacer ( )

◆ ~G4DNAWaterDissociationDisplacer()

G4DNAWaterDissociationDisplacer::~G4DNAWaterDissociationDisplacer ( )
virtual

Definition at line 156 of file G4DNAWaterDissociationDisplacer.cc.

157{
158 ;
159}

Member Function Documentation

◆ ElectronProbaDistribution()

static G4double G4DNAWaterDissociationDisplacer::ElectronProbaDistribution ( G4double  r)
static

◆ GetMotherMoleculeDisplacement()

G4ThreeVector G4DNAWaterDissociationDisplacer::GetMotherMoleculeDisplacement ( const G4MolecularDissociationChannel theDecayChannel) const
overridevirtual

Implements G4VMolecularDissociationDisplacer.

Definition at line 164 of file G4DNAWaterDissociationDisplacer.cc.

167{
168 G4int decayType = theDecayChannel->GetDisplacementType();
169 G4double RMSMotherMoleculeDisplacement(0.);
170
171 switch (decayType)
172 {
173 case Ionisation_DissociationDecay:
174 RMSMotherMoleculeDisplacement = 2.0 * nanometer;
175 break;
176 case A1B1_DissociationDecay:
177 RMSMotherMoleculeDisplacement = 0. * nanometer;
178 break;
179 case B1A1_DissociationDecay:
180 RMSMotherMoleculeDisplacement = 0. * nanometer;
181 break;
182 case AutoIonisation:
183 RMSMotherMoleculeDisplacement = 2.0 * nanometer;
184 break;
185 case DissociativeAttachment:
186 RMSMotherMoleculeDisplacement = 0. * nanometer;
187 break;
188 }
189
190 if (RMSMotherMoleculeDisplacement == 0)
191 {
192 return G4ThreeVector(0, 0, 0);
193 }
194 auto RandDirection =
195 radialDistributionOfProducts(RMSMotherMoleculeDisplacement);
196
197 return RandDirection;
198}
CLHEP::Hep3Vector G4ThreeVector
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4ThreeVector radialDistributionOfProducts(G4double r_rms) const

◆ GetProductsDisplacement()

vector< G4ThreeVector > G4DNAWaterDissociationDisplacer::GetProductsDisplacement ( const G4MolecularDissociationChannel pDecayChannel) const
overridevirtual

Implements G4VMolecularDissociationDisplacer.

Definition at line 203 of file G4DNAWaterDissociationDisplacer.cc.

205{
206 G4int nbProducts = pDecayChannel->GetNbProducts();
207 vector<G4ThreeVector> theProductDisplacementVector(nbProducts);
208
209 typedef map<const G4MoleculeDefinition*, G4double> RMSmap;
210 RMSmap theRMSmap;
211
212 G4int decayType = pDecayChannel->GetDisplacementType();
213
214 switch (decayType)
215 {
216 case Ionisation_DissociationDecay:
217 {
218 if (fVerbose)
219 {
220 G4cout << "Ionisation_DissociationDecay" << G4endl;
221 G4cout << "Channel's name: " << pDecayChannel->GetName() << G4endl;
222 }
223 G4double RdmValue = G4UniformRand();
224
225 if (RdmValue < 0.5)
226 {
227 // H3O
228 theRMSmap[G4H3O::Definition()] = 0. * nanometer;
229 // OH
230 theRMSmap[G4OH::Definition()] = 0.8 * nanometer;
231 }
232 else
233 {
234 // H3O
235 theRMSmap[G4H3O::Definition()] = 0.8 * nanometer;
236 // OH
237 theRMSmap[G4OH::Definition()] = 0. * nanometer;
238 }
239
240 for (int i = 0; i < nbProducts; i++)
241 {
242 auto pProduct = pDecayChannel->GetProduct(i);
243 G4double theRMSDisplacement = theRMSmap[pProduct->GetDefinition()];
244
245 if (theRMSDisplacement == 0.)
246 {
247 theProductDisplacementVector[i] = G4ThreeVector();
248 }
249 else
250 {
251 auto RandDirection = radialDistributionOfProducts(theRMSDisplacement);
252 theProductDisplacementVector[i] = RandDirection;
253 }
254 }
255 break;
256 }
257 case A1B1_DissociationDecay:
258 {
259 if (fVerbose)
260 {
261 G4cout << "A1B1_DissociationDecay" << G4endl;
262 G4cout << "Channel's name: " << pDecayChannel->GetName() << G4endl;
263 }
264 G4double theRMSDisplacement = 2.4 * nanometer;
265 auto RandDirection =
266 radialDistributionOfProducts(theRMSDisplacement);
267
268 for (G4int i = 0; i < nbProducts; i++)
269 {
270 auto pProduct = pDecayChannel->GetProduct(i);
271
272 if (pProduct->GetDefinition() == G4OH::Definition())
273 {
274 theProductDisplacementVector[i] = -1. / 18. * RandDirection;
275 }
276 else if (pProduct->GetDefinition() == G4Hydrogen::Definition())
277 {
278 theProductDisplacementVector[i] = +17. / 18. * RandDirection;
279 }
280 }
281 break;
282 }
283 case B1A1_DissociationDecay:
284 {
285 if (fVerbose)
286 {
287 G4cout << "B1A1_DissociationDecay" << G4endl;
288 G4cout << "Channel's name: " << pDecayChannel->GetName() << G4endl;
289 }
290
291 G4double theRMSDisplacement = 0.8 * nanometer;
292 auto RandDirection =
293 radialDistributionOfProducts(theRMSDisplacement);
294
295 G4int NbOfOH = 0;
296 for (G4int i = 0; i < nbProducts; ++i)
297 {
298 auto pProduct = pDecayChannel->GetProduct(i);
299 if (pProduct->GetDefinition() == G4H2::Definition())
300 {
301 // H2
302 theProductDisplacementVector[i] = -2. / 18. * RandDirection;
303 }
304 else if (pProduct->GetDefinition() == G4OH::Definition())
305 {
306 // OH
307 G4ThreeVector OxygenDisplacement = +16. / 18. * RandDirection;
308 G4double OHRMSDisplacement = 1.1 * nanometer;
309
310 auto OHDisplacement =
311 radialDistributionOfProducts(OHRMSDisplacement);
312
313 if (NbOfOH == 0)
314 {
315 OHDisplacement = 0.5 * OHDisplacement;
316 }
317 else
318 {
319 OHDisplacement = -0.5 * OHDisplacement;
320 }
321
322 theProductDisplacementVector[i] =
323 OHDisplacement + OxygenDisplacement;
324
325 ++NbOfOH;
326 }
327 }
328 break;
329 }
330 case AutoIonisation:
331 {
332 if (fVerbose)
333 {
334 G4cout << "AutoIonisation" << G4endl;
335 G4cout << "Channel's name: " << pDecayChannel->GetName() << G4endl;
336 }
337
338 G4double RdmValue = G4UniformRand();
339
340 if (RdmValue < 0.5)
341 {
342 // H3O
343 theRMSmap[G4H3O::Definition()] = 0. * nanometer;
344 // OH
345 theRMSmap[G4OH::Definition()] = 0.8 * nanometer;
346 }
347 else
348 {
349 // H3O
350 theRMSmap[G4H3O::Definition()] = 0.8 * nanometer;
351 // OH
352 theRMSmap[G4OH::Definition()] = 0. * nanometer;
353 }
354
355 for (G4int i = 0; i < nbProducts; i++)
356 {
357 auto pProduct = pDecayChannel->GetProduct(i);
358 auto theRMSDisplacement = theRMSmap[pProduct->GetDefinition()];
359
360 if (theRMSDisplacement == 0)
361 {
362 theProductDisplacementVector[i] = G4ThreeVector();
363 }
364 else
365 {
366 auto RandDirection =
367 radialDistributionOfProducts(theRMSDisplacement);
368 theProductDisplacementVector[i] = RandDirection;
369 }
370 if (pProduct->GetDefinition() == G4Electron_aq::Definition())
371 {
372 theProductDisplacementVector[i] = radialDistributionOfElectron();
373 }
374 }
375 break;
376 }
377 case DissociativeAttachment:
378 {
379 if (fVerbose)
380 {
381 G4cout << "DissociativeAttachment" << G4endl;
382 G4cout << "Channel's name: " << pDecayChannel->GetName() << G4endl;
383 }
384 G4double theRMSDisplacement = 0.8 * nanometer;
385 auto RandDirection =
386 radialDistributionOfProducts(theRMSDisplacement);
387
388 G4int NbOfOH = 0;
389 for (G4int i = 0; i < nbProducts; ++i)
390 {
391 auto pProduct = pDecayChannel->GetProduct(i);
392 if (pProduct->GetDefinition() == G4H2::Definition())
393 {
394 // In the paper of Kreipl (2009)
395 // theProductDisplacementVector[i] = -2. / 18. * RandDirection;
396
397 // Based on momentum conservation
398 theProductDisplacementVector[i] = -16. / 18. * RandDirection;
399 }
400 else if (pProduct->GetDefinition() == G4OH::Definition())
401 {
402 // In the paper of Kreipl (2009)
403 // G4ThreeVector OxygenDisplacement = +16. / 18. * RandDirection;
404
405 // Based on momentum conservation
406 G4ThreeVector OxygenDisplacement = +2. / 18. * RandDirection;
407 G4double OHRMSDisplacement = 1.1 * nanometer;
408
409 auto OHDisplacement =
410 radialDistributionOfProducts(OHRMSDisplacement);
411
412 if (NbOfOH == 0)
413 {
414 OHDisplacement = 0.5 * OHDisplacement;
415 }
416 else
417 {
418 OHDisplacement = -0.5 * OHDisplacement;
419 }
420 theProductDisplacementVector[i] = OHDisplacement +
421 OxygenDisplacement;
422 ++NbOfOH;
423 }
424 }
425 break;
426 }
427 }
428 return theProductDisplacementVector;
429}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
#define G4UniformRand()
Definition: Randomize.hh:52
static G4Electron_aq * Definition()
static G4H3O * Definition()
Definition: G4H3O.cc:46
static G4Hydrogen * Definition()
Definition: G4Hydrogen.cc:45
static G4OH * Definition()
Definition: G4OH.cc:45

◆ radialDistributionOfElectron()

G4ThreeVector G4DNAWaterDissociationDisplacer::radialDistributionOfElectron ( ) const

Definition at line 448 of file G4DNAWaterDissociationDisplacer.cc.

449{/*
450 G4double rand_value = G4UniformRand();
451 size_t nBins = fElectronThermalization.size();
452 size_t bin = size_t(floor(rand_value * nBins));
453 size_t bin_p1 = min(bin + 1, nBins - 1);
454
455 return (fElectronThermalization[bin] * (1. - rand_value)
456 + fElectronThermalization[bin_p1] * rand_value) *
457 G4RandomDirection();*/
458
459 G4ThreeVector pdf = G4ThreeVector(0,0,0);
460
466
467 return pdf;
468}
@ fKreipl2009eSolvation
@ fMeesungnoensolid2002eSolvation
@ fRitchie1994eSolvation
@ fTerrisol1990eSolvation
static void GetPenetration(G4double energy, G4ThreeVector &displacement)
static void GetPenetration(G4double energy, G4ThreeVector &displacement)
static void GetPenetration(G4double energy, G4ThreeVector &displacement)
static void GetPenetration(G4double energy, G4ThreeVector &displacement)
static void GetPenetration(G4double energy, G4ThreeVector &displacement)

Referenced by GetProductsDisplacement().

◆ radialDistributionOfProducts()

G4ThreeVector G4DNAWaterDissociationDisplacer::radialDistributionOfProducts ( G4double  r_rms) const

Definition at line 434 of file G4DNAWaterDissociationDisplacer.cc.

436{
437 static const double inverse_sqrt_3 = 1. / sqrt(3.);
438 double sigma = Rrms * inverse_sqrt_3;
439 double x = G4RandGauss::shoot(0., sigma);
440 double y = G4RandGauss::shoot(0., sigma);
441 double z = G4RandGauss::shoot(0., sigma);
442 return G4ThreeVector(x, y, z);
443}

Referenced by GetMotherMoleculeDisplacement(), and GetProductsDisplacement().


The documentation for this class was generated from the following files: