Geant4  10.01.p02
G4EmDNAChemistry.cc
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 #include "G4EmDNAChemistry.hh"
27 
28 #include "G4PhysicalConstants.hh"
29 #include "G4SystemOfUnits.hh"
30 
32 #include "G4DNAChemistryManager.hh"
34 #include "G4ProcessManager.hh"
35 
37 
38 // *** Processes and models for Geant4-DNA
39 
41 
42 #include "G4DNAAttachment.hh"
43 #include "G4DNAVibExcitation.hh"
44 
45 #include "G4DNAElastic.hh"
48 
53 #include "G4VDNAReactionModel.hh"
54 
55 // particles
56 
57 #include "G4Electron.hh"
58 #include "G4Proton.hh"
59 #include "G4GenericIon.hh"
60 
61 #include "G4MoleculeTable.hh"
62 #include "G4H2O.hh"
63 #include "G4H2.hh"
64 #include "G4Hydrogen.hh"
65 #include "G4OH.hh"
66 #include "G4H3O.hh"
67 #include "G4Electron_aq.hh"
68 #include "G4H2O2.hh"
69 
70 #include "G4PhysicsListHelper.hh"
71 #include "G4BuilderType.hh"
72 
75 
76 /****/
78 #include "G4ProcessVector.hh"
79 #include "G4ProcessTable.hh"
82 /****/
83 
84 // factory
86 
88 
89 #include "G4Threading.hh"
90 
93 {
95 }
96 
97 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
98 
100 {
101 }
102 
103 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
104 
106 {
107  //-----------------------------------
108  G4Electron::Definition(); // safety
109 
110  //-----------------------------------
111  // Create the definition
119 
122  CreateMoleculeModel("OHm", // just a tag to store and retrieve from
123  // G4MoleculeTable
124  G4OH::Definition(), -1, 5.0e-9 * (m2 / s));
125  OHm->SetMass(17.0079 * g / Avogadro * c_squared);
133 }
134 
135 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
136 
138 {
139  //-----------------------------------
140  //Create the dynamic objects
147 
148  //-------------------------------------
149  //Define the decay channels
153 
155  *(water->GetGroundStateElectronOccupancy()));
156 
158  // EXCITATIONS //
160  G4DNAWaterExcitationStructure waterExcitation;
161  //--------------------------------------------------------
162  //---------------Excitation on the fifth layer------------
163 
164  decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation");
165  decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay");
166  //Decay 1 : OH + H
167  decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
168  decCh1->SetProbability(0.35);
170 
171  decCh2->AddProduct(OH);
172  decCh2->AddProduct(H);
173  decCh2->SetProbability(0.65);
174  decCh2->SetDisplacementType(
176 
177  water->AddExcitedState("A^1B_1");
178  water->AddDecayChannel("A^1B_1", decCh1);
179  water->AddDecayChannel("A^1B_1", decCh2);
180 
181  occ->RemoveElectron(4, 1); // this is the transition form ground state to
182  occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1
183 
184  water->AddeConfToExcitedState("A^1B_1", *occ);
185 
186  //--------------------------------------------------------
187  //---------------Excitation on the fourth layer-----------
188  decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel");
189  decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay");
191  "B^1A_1_AutoIonisation_Channel");
192 
193  water->AddExcitedState("B^1A_1");
194 
195  //Decay 1 : energy
196  decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
197  decCh1->SetProbability(0.3);
198 
199  //Decay 2 : 2OH + H_2
200  decCh2->AddProduct(H2);
201  decCh2->AddProduct(OH);
202  decCh2->AddProduct(OH);
203  decCh2->SetProbability(0.15);
204  decCh2->SetDisplacementType(
206 
207  //Decay 3 : OH + H_3Op + e_aq
208  decCh3->AddProduct(OH);
209  decCh3->AddProduct(H3O);
210  decCh3->AddProduct(e_aq);
211  decCh3->SetProbability(0.55);
213 
214  *occ = *(water->GetGroundStateElectronOccupancy());
215  occ->RemoveElectron(3); // this is the transition form ground state to
216  occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
217 
218  water->AddeConfToExcitedState("B^1A_1", *occ);
219  water->AddDecayChannel("B^1A_1", decCh1);
220  water->AddDecayChannel("B^1A_1", decCh2);
221  water->AddDecayChannel("B^1A_1", decCh3);
222 
223  //-------------------------------------------------------
224  //-------------------Excitation of 3rd layer-----------------
225  decCh1 = new G4MolecularDissociationChannel(
226  "Excitation3rdLayer_AutoIonisation_Channel");
227  decCh2 = new G4MolecularDissociationChannel(
228  "Excitation3rdLayer_Relaxation_Channel");
229 
230  water->AddExcitedState("Excitation3rdLayer");
231 
232  //Decay channel 1 : : OH + H_3Op + e_aq
233  decCh1->AddProduct(OH);
234  decCh1->AddProduct(H3O);
235  decCh1->AddProduct(e_aq);
236 
237  decCh1->SetProbability(0.5);
239 
240  //Decay channel 2 : energy
241  decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
242  decCh2->SetProbability(0.5);
243 
244  //Electronic configuration of this decay
245  *occ = *(water->GetGroundStateElectronOccupancy());
246  occ->RemoveElectron(2, 1);
247  occ->AddElectron(5, 1);
248 
249  //Configure the water molecule
250  water->AddeConfToExcitedState("Excitation3rdLayer", *occ);
251  water->AddDecayChannel("Excitation3rdLayer", decCh1);
252  water->AddDecayChannel("Excitation3rdLayer", decCh2);
253 
254  //-------------------------------------------------------
255  //-------------------Excitation of 2nd layer-----------------
256  decCh1 = new G4MolecularDissociationChannel(
257  "Excitation2ndLayer_AutoIonisation_Channel");
258  decCh2 = new G4MolecularDissociationChannel(
259  "Excitation2ndLayer_Relaxation_Channel");
260 
261  water->AddExcitedState("Excitation2ndLayer");
262 
263  //Decay Channel 1 : : OH + H_3Op + e_aq
264  decCh1->AddProduct(OH);
265  decCh1->AddProduct(H3O);
266  decCh1->AddProduct(e_aq);
267 
268  decCh1->SetProbability(0.5);
270 
271  //Decay channel 2 : energy
272  decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
273  decCh2->SetProbability(0.5);
274 
275  *occ = *(water->GetGroundStateElectronOccupancy());
276  occ->RemoveElectron(1, 1);
277  occ->AddElectron(5, 1);
278 
279  water->AddeConfToExcitedState("Excitation2ndLayer", *occ);
280  water->AddDecayChannel("Excitation2ndLayer", decCh1);
281  water->AddDecayChannel("Excitation2ndLayer", decCh2);
282 
283  //-------------------------------------------------------
284  //-------------------Excitation of 1st layer-----------------
285  decCh1 = new G4MolecularDissociationChannel(
286  "Excitation1stLayer_AutoIonisation_Channel");
287  decCh2 = new G4MolecularDissociationChannel(
288  "Excitation1stLayer_Relaxation_Channel");
289 
290  *occ = *(water->GetGroundStateElectronOccupancy());
291  occ->RemoveElectron(0, 1);
292  occ->AddElectron(5, 1);
293 
294  water->AddExcitedState("Excitation1stLayer");
295  water->AddeConfToExcitedState("Excitation1stLayer", *occ);
296 
297  //Decay Channel 1 : : OH + H_3Op + e_aq
298  decCh1->AddProduct(OH);
299  decCh1->AddProduct(H3O);
300  decCh1->AddProduct(e_aq);
301  decCh1->SetProbability(0.5);
303 
304  //Decay channel 2 : energy
305  decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
306  decCh2->SetProbability(0.5);
307  water->AddDecayChannel("Excitation1stLayer", decCh1);
308  water->AddDecayChannel("Excitation1stLayer", decCh2);
309 
311  // IONISATION //
313  //--------------------------------------------------------
314  //------------------- Ionisation -------------------------
315  water->AddExcitedState("Ionisation");
316 
317  decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel");
318 
319  //Decay Channel 1 : : OH + H_3Op
320  decCh1->AddProduct(H3O);
321  decCh1->AddProduct(OH);
322  decCh1->SetProbability(1);
323  decCh1->SetDisplacementType(
325 
326  *occ = *(water->GetGroundStateElectronOccupancy());
327  occ->RemoveElectron(4, 1);
328  // this is a ionized h2O with a hole in its last orbital
329  water->AddeConfToExcitedState("Ionisation", *occ);
330 
331  *occ = *(water->GetGroundStateElectronOccupancy());
332  occ->RemoveElectron(3, 1);
333  water->AddeConfToExcitedState("Ionisation", *occ);
334 
335  *occ = *(water->GetGroundStateElectronOccupancy());
336  occ->RemoveElectron(2, 1);
337  water->AddeConfToExcitedState("Ionisation", *occ);
338 
339  *occ = *(water->GetGroundStateElectronOccupancy());
340  occ->RemoveElectron(1, 1);
341  water->AddeConfToExcitedState("Ionisation", *occ);
342 
343  *occ = *(water->GetGroundStateElectronOccupancy());
344  occ->RemoveElectron(0, 1);
345  water->AddeConfToExcitedState("Ionisation", *occ);
346  water->AddDecayChannel("Ionisation", decCh1);
347 
349  // Dissociative Attachment //
351  decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment");
352 
353  //Decay 1 : 2OH + H_2
354  decCh1->AddProduct(H2);
355  decCh1->AddProduct(OHm);
356  decCh1->AddProduct(OH);
357  decCh1->SetProbability(1);
358  //decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
359 // DissociativeAttachment);
360 
361  *occ = *(water->GetGroundStateElectronOccupancy());
362  occ->AddElectron(5, 1); // H_2O^-
363  water->AddExcitedState("DissociativeAttachment");
364  water->AddeConfToExcitedState("DissociativeAttachment", *occ);
365  water->AddDecayChannel("DissociativeAttachment", decCh1);
366 
367  delete occ;
368 }
369 
370 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
371 
373  theReactionTable)
374 {
382 
383  //------------------------------------------------------------------
384  // e_aq + e_aq + 2H2O -> H2 + 2OH-
386  0.5e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq);
387  reactionData->AddProduct(OHm);
388  reactionData->AddProduct(OHm);
389  reactionData->AddProduct(H2);
390  theReactionTable->SetReaction(reactionData);
391  //------------------------------------------------------------------
392  // e_aq + *OH -> OH-
393  reactionData = new G4DNAMolecularReactionData(
394  2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH);
395  reactionData->AddProduct(OHm);
396  theReactionTable->SetReaction(reactionData);
397  //------------------------------------------------------------------
398  // e_aq + H* + H2O -> H2 + OH-
399  reactionData = new G4DNAMolecularReactionData(
400  2.65e10 * (1e-3 * m3 / (mole * s)), e_aq, H);
401  reactionData->AddProduct(OHm);
402  reactionData->AddProduct(H2);
403  theReactionTable->SetReaction(reactionData);
404  //------------------------------------------------------------------
405  // e_aq + H3O+ -> H* + H2O
406  reactionData = new G4DNAMolecularReactionData(
407  2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op);
408  reactionData->AddProduct(H);
409  theReactionTable->SetReaction(reactionData);
410  //------------------------------------------------------------------
411  // e_aq + H2O2 -> OH- + *OH
412  reactionData = new G4DNAMolecularReactionData(
413  1.41e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2);
414  reactionData->AddProduct(OHm);
415  reactionData->AddProduct(OH);
416  theReactionTable->SetReaction(reactionData);
417  //------------------------------------------------------------------
418  // *OH + *OH -> H2O2
419  reactionData = new G4DNAMolecularReactionData(
420  0.44e10 * (1e-3 * m3 / (mole * s)), OH, OH);
421  reactionData->AddProduct(H2O2);
422  theReactionTable->SetReaction(reactionData);
423  //------------------------------------------------------------------
424  // *OH + *H -> H2O
425  theReactionTable->SetReaction(1.44e10 * (1e-3 * m3 / (mole * s)), OH, H);
426  //------------------------------------------------------------------
427  // *H + *H -> H2
428  reactionData = new G4DNAMolecularReactionData(
429  1.20e10 * (1e-3 * m3 / (mole * s)), H, H);
430  reactionData->AddProduct(H2);
431  theReactionTable->SetReaction(reactionData);
432  //------------------------------------------------------------------
433  // H3O+ + OH- -> 2H2O
434  theReactionTable->SetReaction(1.43e11 * (1e-3 * m3 / (mole * s)), H3Op, OHm);
435  //------------------------------------------------------------------
436 }
437 
438 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
439 
441 {
443 
444  //===============================================================
445  // Extend vibrational to low energy
446  // Anyway, solvation of electrons is taken into account from 7.4 eV
447  // So below this threshold, for now, no accurate modeling is done
448  //
450  "e-_G4DNAVibExcitation", "e-");
451 
452  if (process)
453  {
454  G4DNAVibExcitation* vibExcitation = (G4DNAVibExcitation*) process;
455  G4VEmModel* model = vibExcitation->EmModel();
456  G4DNASancheExcitationModel* sancheExcitationMod =
457  dynamic_cast<G4DNASancheExcitationModel*>(model);
458  if(sancheExcitationMod)
459  {
460  sancheExcitationMod->ExtendLowEnergyLimit(0.025 * eV);
461  }
462  }
463 
464  //===============================================================
465  // Modify elastic scattering models to avoid killing electrons
466  // at low energy
467  //
469  "e-_G4DNAElastic", "e-");
470 
471  if (process)
472  {
473  G4DNAElastic* vibExcitation = (G4DNAElastic*) process;
474  G4VEmModel* model = vibExcitation->EmModel();
475 
476  if(G4DNAChampionElasticModel* championMod =
477  dynamic_cast<G4DNAChampionElasticModel*>(model))
478  {
479  championMod->SetKillBelowThreshold(-1);
480  }
481  else if(G4DNAScreenedRutherfordElasticModel* screenRutherfordMod =
482  dynamic_cast<G4DNAScreenedRutherfordElasticModel*>(model))
483  {
484  screenRutherfordMod->SetKillBelowThreshold(-1);
485  }
486  }
487 
488  //===============================================================
489  // *** Electron Solvatation ***
490  //
491  ph->RegisterProcess(
492  new G4DNAElectronSolvatation("e-_G4DNAElectronSolvatation"),
494 
495  //===============================================================
496  // Define processes for molecules
497  //
498  G4MoleculeTable* theMoleculeTable = G4MoleculeTable::Instance();
500  theMoleculeTable->GetDefintionIterator();
501  iterator.reset();
502  while (iterator())
503  {
504  G4MoleculeDefinition* moleculeDef = iterator.value();
505 
506  if (moleculeDef != G4H2O::Definition())
507  {
508  // G4cout << "Brownian motion added for : "
509  // << moleculeDef->GetName() << G4endl;
511  // brown->SetVerboseLevel(4);
512  ph->RegisterProcess(brown, moleculeDef);
513  }
514  else
515  {
516  G4DNAMolecularDissociation* dissociationProcess =
517  new G4DNAMolecularDissociation("H2O_DNAMolecularDecay");
518  dissociationProcess->SetDecayDisplacer(
519  moleculeDef, new G4DNAWaterDissociationDisplacer);
520  dissociationProcess->SetVerboseLevel(1);
521  ph->RegisterProcess(dissociationProcess, moleculeDef);
522  }
523  /*
524  * Warning : end of particles and processes are needed by
525  * EM Physics builders
526  */
527  }
528 
530 }
531 
532 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
533 
535  reactionTable)
536 {
537 
538  //=========================================
539  // Diffusion controlled reaction model
540  //=========================================
546  G4VDNAReactionModel* reactionRadiusComputer =
548  reactionTable->PrintTable(reactionRadiusComputer);
549 
555  G4DNAMolecularStepByStepModel* stepByStep =
557  stepByStep->SetReactionModel(reactionRadiusComputer);
558 // ((G4DNAMoleculeEncounterStepper*) stepByStep->GetTimeStepper())->
559 // SetVerbose(5);
560 
561  RegisterTimeStepModel(stepByStep, 0);
562 }
virtual void ConstructDissociationChannels()
G4VDNAReactionModel is an interface used by the G4DNAMolecularReaction process.
static G4DLLIMPORT const DisplacementType AutoIonisation
static G4DLLIMPORT const DisplacementType B1A1_DissociationDecay
static G4Electron_aq * Definition()
static G4DLLIMPORT const DisplacementType NoDisplacement
void AddProduct(const G4Molecule *molecule)
static G4H2O * Definition()
Definition: G4H2O.cc:46
virtual void ConstructReactionTable(G4DNAMolecularReactionTable *reactionTable)
static G4DLLIMPORT const DisplacementType A1B1_DissociationDecay
G4DNASmoluchowskiReactionModel should be used for very fast reactions (high reaction rate) : the reac...
static G4DLLIMPORT const DisplacementType Ionisation_DissociationDecay
static const double m3
Definition: G4SIunits.hh:112
G4VEmModel * EmModel(G4int index=1) const
void SetMass(G4double)
Set the total mass of the molecule.
Definition: G4Molecule.cc:440
virtual void ConstructProcess()
G4DNAMolecularReactionTable sorts out the G4DNAMolecularReactionData for bimolecular reaction...
virtual void ConstructTimeStepModel(G4DNAMolecularReactionTable *reactionTable)
static G4Electron * Definition()
Definition: G4Electron.cc:49
virtual ~G4EmDNAChemistry()
void AddeConfToExcitedState(const G4String &, const G4ElectronOccupancy &, double decayTime=0.)
static const double s
Definition: G4SIunits.hh:150
void SetChemistryList(G4VUserChemistryList *)
virtual void ConstructMolecule()
void AddProduct(const G4Molecule *, G4double=0)
static const double m2
Definition: G4SIunits.hh:111
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry)
static G4H3O * Definition()
Definition: G4H3O.cc:47
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
G4int AddElectron(G4int orbit, G4int number=1)
void AddExcitedState(const G4String &)
static G4MoleculeTable * Instance()
void PrintTable(G4VDNAReactionModel *=0)
void AddDecayChannel(const G4String &, const G4MolecularDissociationChannel *)
G4DNAMolecularReactionData contains the information relative to a given reaction (eg : °OH + °OH -> H...
static G4DNAChemistryManager * Instance()
static const double eV
Definition: G4SIunits.hh:194
G4MoleculeDefinitionIterator GetDefintionIterator()
void SetReaction(G4double observedReactionRate, const G4Molecule *reactive1, const G4Molecule *reactive2)
Define a reaction : First argument : reaction rate Second argument : reactant 1 Third argument : reac...
G4Molecule * GetMoleculeModel(const G4String &, bool mustExist=true)
static const double g
Definition: G4SIunits.hh:162
static G4PhysicsListHelper * GetPhysicsListHelper()
G4DNAMolecularStepByStepModel :
static const double mole
Definition: G4SIunits.hh:265
static G4H2O2 * Definition()
Definition: G4H2O2.cc:46
static G4OH * Definition()
Definition: G4OH.cc:46
G4DNAMolecularDissociation should be called only for molecules.
Class Description The dynamic molecule holds all the data that change for a molecule It has a pointer...
Definition: G4Molecule.hh:93
void SetDecayDisplacer(const G4ParticleDefinition *, G4VMolecularDecayDisplacer *)
const G4ElectronOccupancy * GetGroundStateElectronOccupancy() const
static G4H2 * Definition()
Definition: G4H2.cc:46
void SetReactionModel(G4VDNAReactionModel *)
static G4ProcessTable * GetProcessTable()
G4VProcess * FindProcess(const G4String &processName, const G4String &particleName) const
G4Molecule * CreateMoleculeModel(const G4String &, G4MoleculeDefinition *, int charge, double diffusion_coefficient=-1)
void SetVerboseLevel(G4int value)
Definition: G4VProcess.hh:437
G4int RemoveElectron(G4int orbit, G4int number=1)
void RegisterTimeStepModel(G4VITStepModel *timeStepModel, double startingTime=0)
static G4Hydrogen * Definition()
Definition: G4Hydrogen.cc:46