Geant4-11
Public Member Functions | Static Public Member Functions | Protected Attributes | Private Attributes
G4DNAWaterDissociationDisplacer Class Reference

#include <G4DNAWaterDissociationDisplacer.hh>

Inheritance diagram for G4DNAWaterDissociationDisplacer:
G4VMolecularDissociationDisplacer

Public Member Functions

 G4DNAWaterDissociationDisplacer ()
 
G4ThreeVector GetMotherMoleculeDisplacement (const G4MolecularDissociationChannel *) const override
 
std::vector< G4ThreeVectorGetProductsDisplacement (const G4MolecularDissociationChannel *) const override
 
G4ThreeVector radialDistributionOfElectron () const
 
G4ThreeVector radialDistributionOfProducts (G4double r_rms) const
 
void SetVerbose (G4int verbose)
 
virtual ~G4DNAWaterDissociationDisplacer ()
 

Static Public Member Functions

static G4double ElectronProbaDistribution (G4double r)
 

Protected Attributes

G4int fVerbose
 

Private Attributes

G4DNAModelSubType dnaSubType
 
G4double ke
 

Detailed Description

Definition at line 57 of file G4DNAWaterDissociationDisplacer.hh.

Constructor & Destructor Documentation

◆ G4DNAWaterDissociationDisplacer()

A1B1_DissociationDecay B1A1_DissociationDecay2 DissociativeAttachment G4DNAWaterDissociationDisplacer::G4DNAWaterDissociationDisplacer ( )

Definition at line 125 of file G4DNAWaterDissociationDisplacer.cc.

126 :
128 ke(1.7*eV)
129/*#ifdef _WATER_DISPLACER_USE_KREIPL_
130 fFastElectronDistrib(0., 5., 0.001)
131#elif defined _WATER_DISPLACER_USE_TERRISOL_
132 fFastElectronDistrib(0., 100., 0.001)
133#endif*/
134{/*
135 fProba1DFunction =
136 std::bind((G4double(*)(G4double))
137 &G4DNAWaterDissociationDisplacer::ElectronProbaDistribution,
138 std::placeholders::_1);
139
140 size_t nBins = 500;
141 fElectronThermalization.reserve(nBins);
142 double eps = 1. / ((int) nBins);
143 double proba = eps;
144
145 fElectronThermalization.push_back(0.);
146
147 for (size_t i = 1; i < nBins; ++i)
148 {
149 double r = fFastElectronDistrib.Revert(proba, fProba1DFunction);
150 fElectronThermalization.push_back(r * nanometer);
151 proba += eps;
152// G4cout << G4BestUnit(r*nanometer, "Length") << G4endl;
153 }*/
155// SetVerbose(1);
156}
static constexpr double eV
Definition: G4SIunits.hh:201
static G4EmParameters * Instance()
G4DNAModelSubType DNAeSolvationSubType() const

References G4EmParameters::DNAeSolvationSubType(), and G4EmParameters::Instance().

◆ ~G4DNAWaterDissociationDisplacer()

G4DNAWaterDissociationDisplacer::~G4DNAWaterDissociationDisplacer ( )
virtual

Definition at line 160 of file G4DNAWaterDissociationDisplacer.cc.

161{
162 ;
163}

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 168 of file G4DNAWaterDissociationDisplacer.cc.

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

References G4MolecularDissociationChannel::GetDisplacementType(), nanometer, and radialDistributionOfProducts().

◆ GetProductsDisplacement()

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

Implements G4VMolecularDissociationDisplacer.

Definition at line 210 of file G4DNAWaterDissociationDisplacer.cc.

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

References G4Electron_aq::Definition(), G4H2::Definition(), G4H3O::Definition(), G4Hydrogen::Definition(), G4OH::Definition(), G4Oxygen::Definition(), G4VMolecularDissociationDisplacer::fVerbose, G4cout, G4endl, G4UniformRand, G4MolecularDissociationChannel::GetDisplacementType(), G4MolecularDissociationChannel::GetName(), G4MolecularDissociationChannel::GetNbProducts(), G4MolecularDissociationChannel::GetProduct(), nanometer, radialDistributionOfElectron(), and radialDistributionOfProducts().

◆ radialDistributionOfElectron()

G4ThreeVector G4DNAWaterDissociationDisplacer::radialDistributionOfElectron ( ) const

Definition at line 492 of file G4DNAWaterDissociationDisplacer.cc.

493{/*
494 G4double rand_value = G4UniformRand();
495 size_t nBins = fElectronThermalization.size();
496 size_t bin = size_t(floor(rand_value * nBins));
497 size_t bin_p1 = min(bin + 1, nBins - 1);
498
499 return (fElectronThermalization[bin] * (1. - rand_value)
500 + fElectronThermalization[bin_p1] * rand_value) *
501 G4RandomDirection();*/
502
503 G4ThreeVector pdf = G4ThreeVector(0,0,0);
504
510
511 return pdf;
512}
@ 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)

References dnaSubType, fKreipl2009eSolvation, fMeesungnoensolid2002eSolvation, fRitchie1994eSolvation, fTerrisol1990eSolvation, DNA::Penetration::Meesungnoen2002::GetPenetration(), DNA::Penetration::Meesungnoen2002_amorphous::GetPenetration(), DNA::Penetration::Kreipl2009::GetPenetration(), DNA::Penetration::Terrisol1990::GetPenetration(), DNA::Penetration::Ritchie1994::GetPenetration(), and ke.

Referenced by GetProductsDisplacement().

◆ radialDistributionOfProducts()

G4ThreeVector G4DNAWaterDissociationDisplacer::radialDistributionOfProducts ( G4double  r_rms) const

Definition at line 478 of file G4DNAWaterDissociationDisplacer.cc.

480{
481 static const double inverse_sqrt_3 = 1. / sqrt(3.);
482 double sigma = Rrms * inverse_sqrt_3;
483 double x = G4RandGauss::shoot(0., sigma);
484 double y = G4RandGauss::shoot(0., sigma);
485 double z = G4RandGauss::shoot(0., sigma);
486 return G4ThreeVector(x, y, z);
487}
ThreeVector shoot(const G4int Ap, const G4int Af)

References G4INCL::DeJongSpin::shoot().

Referenced by GetMotherMoleculeDisplacement(), and GetProductsDisplacement().

◆ SetVerbose()

void G4VMolecularDissociationDisplacer::SetVerbose ( G4int  verbose)
inlineinherited

Definition at line 72 of file G4VMolecularDissociationDisplacer.hh.

73 {
74 fVerbose = verbose;
75 }

References G4VMolecularDissociationDisplacer::fVerbose.

Field Documentation

◆ dnaSubType

G4DNAModelSubType G4DNAWaterDissociationDisplacer::dnaSubType
private

Definition at line 84 of file G4DNAWaterDissociationDisplacer.hh.

Referenced by radialDistributionOfElectron().

◆ fVerbose

G4int G4VMolecularDissociationDisplacer::fVerbose
protectedinherited

◆ ke

G4double G4DNAWaterDissociationDisplacer::ke
private

Definition at line 83 of file G4DNAWaterDissociationDisplacer.hh.

Referenced by radialDistributionOfElectron().


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