Geant4  10.02.p01
G4DNAMolecularReactionTable.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 // $Id: G4DNAMolecularReactionTable.cc 94688 2015-12-02 17:15:08Z gunter $
27 //
28 // Author: Mathieu Karamitros (kara (AT) cenbg . in2p3 . fr)
29 //
30 // WARNING : This class is released as a prototype.
31 // It might strongly evolve or even disapear in the next releases.
32 //
33 // History:
34 // -----------
35 // 10 Oct 2011 M.Karamitros created
36 //
37 // -------------------------------------------------------------------
38 
39 #include <iomanip>
40 
42 #include "G4PhysicalConstants.hh"
43 #include "G4SystemOfUnits.hh"
44 #include "G4UIcommand.hh"
45 #include "G4VDNAReactionModel.hh"
47 #include "G4MoleculeTable.hh"
50 #include "G4IosFlagsSaver.hh"
51 
52 using namespace std;
53 
55 
57  fReactant1(),
58  fReactant2(),
59  fObservedReactionRate(0.),
60  fEffectiveReactionRadius(0.),
61  fProducts(0)
62 {
63  fReactionID = 0;
64 }
65 
66 //______________________________________________________________________________
67 
70  G4MolecularConfiguration* reactant1,
71  G4MolecularConfiguration* reactant2) :
72  fProducts(0)
73 {
74  fObservedReactionRate = reactionRate;
75  SetReactant1(reactant1);
76  SetReactant2(reactant2);
77 
78  G4double sumDiffCoeff(0.);
79 
80  if (reactant1 == reactant2)
81  {
82  sumDiffCoeff = reactant1->GetDiffusionCoefficient();
84  / (4 * pi * sumDiffCoeff * Avogadro);
85  }
86  else
87  {
88  sumDiffCoeff = reactant1->GetDiffusionCoefficient()
89  + reactant2->GetDiffusionCoefficient();
91  (4 * pi * sumDiffCoeff * Avogadro);
92  }
93  fReactionID = 0;
94 }
95 
96 //______________________________________________________________________________
97 
100  const G4String& reactant1,
101  const G4String& reactant2) :
102  fProducts(0)
103 {
104  fObservedReactionRate = reactionRate;
105  SetReactant1(reactant1);
106  SetReactant2(reactant2);
107 
108  G4double sumDiffCoeff(0.);
109 
110  if (fReactant1 == fReactant2)
111  {
112  sumDiffCoeff = fReactant1->GetDiffusionCoefficient();
114  / (4 * pi * sumDiffCoeff * Avogadro);
115  }
116  else
117  {
118  sumDiffCoeff = fReactant1->GetDiffusionCoefficient()
121  (4 * pi * sumDiffCoeff * Avogadro);
122  }
123  fReactionID = 0;
124 }
125 
127 {
128  if (fProducts)
129  {
130  fProducts->clear();
131  delete fProducts;
132  fProducts = 0;
133  }
134 }
135 
137 {
138  fReactant1 = reactive;
139 }
140 
141 
143 {
144  fReactant2 = reactive;
145 }
146 
148  G4MolecularConfiguration* reactant2)
149 {
150  fReactant1 = reactant1;
151  fReactant2 = reactant2;
152 }
153 
155 {
156  if (!fProducts) fProducts = new std::vector<G4MolecularConfiguration*>();
157  fProducts->push_back(molecule);
158 }
159 
161 {
163 }
165 {
167 }
169  const G4String& reactant2)
170 {
173 }
174 
176 {
177  if (!fProducts) fProducts = new std::vector<G4MolecularConfiguration*>();
178  fProducts->push_back(G4MoleculeTable::Instance()->GetConfiguration(molecule));
179 }
180 
181 
182 double G4DNAMolecularReactionData::PolynomialParam(double temp_K, std::vector<double> P)
183  {
184  double inv_temp = 1. / temp_K;
185 
186  return pow(10,
187  P[0] + P[1] * inv_temp + P[2] * pow(inv_temp, 2)
188  + P[3] * pow(inv_temp, 3) + P[4] * pow(inv_temp, 4))
189  * (1e-3 * CLHEP::m3 / (CLHEP::mole * CLHEP::s));
190  }
191 
192  double G4DNAMolecularReactionData::ArrehniusParam(double temp_K, std::vector<double> P)
193  {
194  return P[0]*exp(P[1]/temp_K)*
195  (1e-3 * CLHEP::m3 / (CLHEP::mole * CLHEP::s));
196  }
197 
199  double temp_init,
200  double rateCste_init)
201  {
202  double D0 = G4MolecularConfiguration::DiffCoeffWater(temp_init);
203  double Df = G4MolecularConfiguration::DiffCoeffWater(temp_K);
204  return Df*rateCste_init/D0;
205  }
206 
207 //==============================================================================
208 // REACTION TABLE
209 //==============================================================================
210 
212 {
213  if (!fInstance)
214  {
216  }
217  return fInstance;
218 }
219 
220 //_____________________________________________________________________________________
221 
223 {
224  if (!fInstance)
225  {
227  }
228  return fInstance;
229 }
230 
231 //_____________________________________________________________________________________
232 
234 {
235  // DEBUG
236 // G4cout << "G4MolecularReactionTable::DeleteInstance" << G4endl;
237  if (fInstance) delete fInstance;
238  fInstance = 0;
239 }
240 
241 //_____________________________________________________________________________________
242 
245 // , fMoleculeHandleManager(G4MoleculeHandleManager::Instance())
246 {
247 // G4cout << "G4DNAMolecularReactionTable::G4DNAMolecularReactionTable()" << G4endl;
248  fVerbose = false;
250  return;
251 }
252 
253 //_____________________________________________________________________________________
254 
256 {
257  // DEBUG
258 // G4cout << "G4MolecularReactionTable::~G4MolecularReactionTable" << G4endl;
259 
260  if(fpMessenger) delete fpMessenger;
261 
262  ReactionDataMap::iterator it1 = fReactionData.begin();
263  std::map<G4MolecularConfiguration*,
264  const G4DNAMolecularReactionData*>::iterator it2;
265 
266  for(; it1 != fReactionData.end(); it1++)
267  {
268  for(it2 = it1->second.begin(); it2 != it1->second.end(); it2++)
269  {
270  const G4DNAMolecularReactionData* reactionData = it2->second;
271  if(reactionData)
272  {
273  G4MolecularConfiguration* reactant1 =
274  reactionData->GetReactant1();
275  G4MolecularConfiguration* reactant2 =
276  reactionData->GetReactant2();
277 
278  fReactionData[reactant1][reactant2] = 0;
279  fReactionData[reactant2][reactant1] = 0;
280 
281  delete reactionData;
282  }
283  }
284  }
285 
286  fReactionDataMV.clear();
287  fReactionData.clear();
288  fReactantsMV.clear();
289 }
290 
291 //_____________________________________________________________________________________
292 
294 {
295  G4MolecularConfiguration* reactant1 = reactionData->GetReactant1();
296  G4MolecularConfiguration* reactant2 = reactionData->GetReactant2();
297 
298  fReactionData[reactant1][reactant2] = reactionData;
299  fReactantsMV[reactant1].push_back(reactant2);
300  fReactionDataMV[reactant1].push_back(reactionData);
301 
302  if (reactant1 != reactant2)
303  {
304  fReactionData[reactant2][reactant1] = reactionData;
305  fReactantsMV[reactant2].push_back(reactant1);
306  fReactionDataMV[reactant2].push_back(reactionData);
307  }
308 
309  fVectorOfReactionData.push_back(reactionData);
310 }
311 
312 //_____________________________________________________________________________________
313 
315  G4MolecularConfiguration* reactant1,
316  G4MolecularConfiguration* reactant2)
317 {
319  reactionRate, reactant1, reactant2);
320  SetReaction(reactionData);
321 }
322 
323 //_____________________________________________________________________________________
324 
326 {
327  // Print Reactions and Interaction radius for jump step = 3ps
328 
329  G4IosFlagsSaver iosfs(G4cout);
330 
331  if (pReactionModel)
332  {
333  if (!(pReactionModel->GetReactionTable())) pReactionModel->SetReactionTable(
334  this);
335  }
336 
337  ReactivesMV::iterator itReactives;
338 
339  map<G4MolecularConfiguration*, map<G4MolecularConfiguration*, G4bool> > alreadyPrint;
340 
341  G4cout << "Number of chemical species involved in reactions = "
342  << fReactantsMV.size() << G4endl;
343 
344  G4int nbPrintable = fReactantsMV.size() * fReactantsMV.size();
345 
346  G4String *outputReaction = new G4String[nbPrintable];
347  G4String *outputReactionRate = new G4String[nbPrintable];
348  G4String *outputRange = new G4String[nbPrintable];
349  G4int n = 0;
350 
351  for (itReactives = fReactantsMV.begin(); itReactives != fReactantsMV.end();
352  itReactives++)
353  {
354  G4MolecularConfiguration* moleculeA = (G4MolecularConfiguration*) itReactives->first;
355  const vector<G4MolecularConfiguration*>* reactivesVector = CanReactWith(moleculeA);
356 
357  if (pReactionModel) pReactionModel->InitialiseToPrint(moleculeA);
358 
359  G4int nbReactants = fReactantsMV[itReactives->first].size();
360 
361  for (G4int iReact = 0; iReact < nbReactants; iReact++)
362  {
363 
364  G4MolecularConfiguration* moleculeB = (G4MolecularConfiguration*) (*reactivesVector)[iReact];
365 
366  const G4DNAMolecularReactionData* reactionData =
367  fReactionData[moleculeA][moleculeB];
368 
369  //-----------------------------------------------------------
370  // Name of the reaction
371  if (!alreadyPrint[moleculeA][moleculeB])
372  {
373  outputReaction[n] = moleculeA->GetName() + " + " + moleculeB->GetName();
374 
375  G4int nbProducts = reactionData->GetNbProducts();
376 
377  if (nbProducts)
378  {
379  outputReaction[n] += " -> " + reactionData->GetProduct(0)->GetName();
380 
381  for (G4int j = 1; j < nbProducts; j++)
382  {
383  outputReaction[n] += " + " + reactionData->GetProduct(j)->GetName();
384  }
385  }
386  else
387  {
388  outputReaction[n] += " -> No product";
389  }
390 
391  //-----------------------------------------------------------
392  // Interaction Rate
393  outputReactionRate[n] = G4UIcommand::ConvertToString(
394  reactionData->GetObservedReactionRateConstant() / (1e-3 * m3 / (mole * s)));
395 
396  //-----------------------------------------------------------
397  // Calculation of the Interaction Range
398  G4double interactionRange = -1;
399  if (pReactionModel) interactionRange =
400  pReactionModel->GetReactionRadius(iReact);
401 
402  if (interactionRange != -1)
403  {
404  outputRange[n] = G4UIcommand::ConvertToString(
405  interactionRange / nanometer);
406  }
407  else
408  {
409  outputRange[n] = "";
410  }
411 
412  alreadyPrint[moleculeB][moleculeA] = TRUE;
413  n++;
414  }
415  }
416  }
417  // G4cout<<"Number of possible reactions: "<< n << G4endl;
418 
420  // Tableau dynamique en fonction du nombre de caractere maximal dans
421  // chaque colonne
423 
424  G4int maxlengthOutputReaction = -1;
425  G4int maxlengthOutputReactionRate = -1;
426 
427  for (G4int i = 0; i < n; i++)
428  {
429  if (maxlengthOutputReaction < (G4int) outputReaction[i].length())
430  {
431  maxlengthOutputReaction = outputReaction[i].length();
432  }
433  if (maxlengthOutputReactionRate < (G4int) outputReactionRate[i].length())
434  {
435  maxlengthOutputReactionRate = outputReactionRate[i].length();
436  }
437  }
438 
439  maxlengthOutputReaction += 2;
440  maxlengthOutputReactionRate += 2;
441 
442  if (maxlengthOutputReaction < 10) maxlengthOutputReaction = 10;
443  if (maxlengthOutputReactionRate < 30) maxlengthOutputReactionRate = 30;
444 
445  G4String* title;
446 
447  if (pReactionModel) title = new G4String[3];
448  else title = new G4String[2];
449 
450  title[0] = "Reaction";
451  title[1] = "Reaction Rate [dm3/(mol*s)]";
452 
453  if (pReactionModel) title[2] =
454  "Interaction Range for chosen reaction model [nm]";
455 
456  G4cout << setfill(' ') << setw(maxlengthOutputReaction) << left << title[0]
457  << setw(maxlengthOutputReactionRate) << left << title[1];
458 
459  if (pReactionModel) G4cout << setw(2) << left << title[2];
460 
461  G4cout << G4endl;
462 
463  G4cout.fill('-');
464  if (pReactionModel) G4cout.width(
465  maxlengthOutputReaction + 2 + maxlengthOutputReactionRate + 2
466  + (G4int) title[2].length());
467  else G4cout.width(maxlengthOutputReaction + 2 + maxlengthOutputReactionRate);
468  G4cout << "-" << G4endl;
469  G4cout.fill(' ');
470 
471  for (G4int i = 0; i < n; i++)
472  {
473  G4cout << setw(maxlengthOutputReaction) << left << outputReaction[i]
474  << setw(maxlengthOutputReactionRate) << left
475  << outputReactionRate[i];
476 
477  if (pReactionModel) G4cout << setw(2) << left << outputRange[i];
478 
479  G4cout << G4endl;
480 
481  G4cout.fill('-');
482  if (pReactionModel) G4cout.width(
483  maxlengthOutputReaction + 2 + maxlengthOutputReactionRate + 2
484  + (G4int) title[2].length());
485  else G4cout.width(
486  maxlengthOutputReaction + 2 + maxlengthOutputReactionRate);
487  G4cout << "-" << G4endl;
488  G4cout.fill(' ');
489  }
490 
491  delete[] title;
492  delete[] outputReaction;
493  delete[] outputReactionRate;
494  delete[] outputRange;
495 }
496 
497 //______________________________________________________________________________
498 // Get/Set methods
499 
502  G4MolecularConfiguration* reactant2) const
503 {
504  if (fReactionData.empty())
505  {
506  G4String errMsg = "No reaction table was implemented";
507  G4Exception("G4MolecularInteractionTable::GetReactionData", "",
508  FatalErrorInArgument, errMsg);
509  return 0;
510  }
511 
512  ReactionDataMap::const_iterator it1 = fReactionData.find(reactant1);
513 
514  if (it1 == fReactionData.end())
515  {
516  G4String errMsg =
517  "No reaction table was implemented for this molecule Definition : " + reactant1
518  ->GetName();
519 // G4cout << "--- G4MolecularInteractionTable::GetReactionData ---" << G4endl;
520 // G4cout << errMsg << G4endl;
521  G4Exception("G4MolecularInteractionTable::GetReactionData", "",
522  FatalErrorInArgument, errMsg);
523 // return 0;
524  }
525 
526  std::map<G4MolecularConfiguration*,
527  const G4DNAMolecularReactionData*>::const_iterator it2 =
528  it1->second.find(reactant2);
529 
530  if (it2 == it1->second.end())
531  {
532  G4cout << "Name : " << reactant2->GetName() << G4endl;
533  G4String errMsg = "No reaction table was implemented for this molecule : "
534  + reactant2 -> GetName();
535  G4Exception("G4MolecularInteractionTable::GetReactionData","",FatalErrorInArgument, errMsg);
536  }
537 
538  return (it2->second);
539 }
540 
541 //______________________________________________________________________________
542 
543 const std::vector<G4MolecularConfiguration*>*
545 {
546  if (fReactantsMV.empty())
547  {
548  G4String errMsg = "No reaction table was implemented";
549  G4Exception("G4MolecularInteractionTable::CanReactWith", "",
550  FatalErrorInArgument, errMsg);
551  return 0;
552  }
553 
554  ReactivesMV::const_iterator itReactivesMap = fReactantsMV.find(aMolecule);
555 
556  if (itReactivesMap == fReactantsMV.end())
557  {
558 #ifdef G4VERBOSE
559  if (fVerbose)
560  {
561  G4String errMsg = "No reaction table was implemented for this molecule : "
562  + aMolecule->GetName();
563 // G4Exception("G4MolecularInteractionTable::CanReactWith","",FatalErrorInArgument, errMsg);
564  G4cout << "--- G4MolecularInteractionTable::GetReactionData ---" << G4endl;
565  G4cout << errMsg << G4endl;
566  }
567 #endif
568  return 0;
569  }
570  else
571  {
572  if(fVerbose)
573  {
574  G4cout<< " G4MolecularInteractionTable::CanReactWith :"<<G4endl;
575  G4cout<<"You are checking reactants for : " << aMolecule->GetName()<<G4endl;
576  G4cout<<" the number of reactants is : " << itReactivesMap->second.size()<<G4endl;
577 
578  std::vector<G4MolecularConfiguration*>::const_iterator itProductsVector =
579  itReactivesMap->second.begin();
580 
581  for(; itProductsVector != itReactivesMap->second.end(); itProductsVector++)
582  {
583  G4cout<<(*itProductsVector)->GetName()<<G4endl;
584  }
585  }
586  return &(itReactivesMap->second);
587  }
588  return 0;
589 }
590 
591 //______________________________________________________________________________
592 
593 const std::map<G4MolecularConfiguration*, const G4DNAMolecularReactionData*>*
595 {
596  if (fReactionData.empty())
597  {
598  G4String errMsg = "No reaction table was implemented";
599  G4Exception("G4MolecularInteractionTable::CanInteractWith", "",
600  FatalErrorInArgument, errMsg);
601  return 0;
602  }
603 
604  ReactionDataMap::const_iterator itReactivesMap = fReactionData.find(molecule);
605 
606  if (itReactivesMap == fReactionData.end())
607  {
608  return 0;
609 // G4cout << "Nom : " << molecule->GetName() << G4endl;
610 // G4String errMsg = "No reaction table was implemented for this molecule Definition : "
611 // + molecule -> GetName();
612 // G4Exception("G4MolecularInteractionTable::CanReactWith","",FatalErrorInArgument, errMsg);
613  }
614  else
615  {
616  if(fVerbose)
617  {
618  G4cout<< " G4MolecularInteractionTable::CanReactWith :"<<G4endl;
619  G4cout<<"You are checking reactants for : " << molecule->GetName()<<G4endl;
620  G4cout<<" the number of reactants is : " << itReactivesMap->second.size()<<G4endl;
621 
622  std::map<G4MolecularConfiguration*,
623  const G4DNAMolecularReactionData*>::const_iterator itProductsVector =
624  itReactivesMap->second.begin();
625 
626  for(; itProductsVector != itReactivesMap->second.end(); itProductsVector++)
627  {
628  G4cout<<itProductsVector->first->GetName()<<G4endl;
629  }
630  }
631  return &(itReactivesMap->second);
632  }
633 
634  return 0;
635 }
636 
637 //______________________________________________________________________________
638 
639 const std::vector<const G4DNAMolecularReactionData*>*
641 {
642  if (fReactionDataMV.empty())
643  {
644  G4String errMsg = "No reaction table was implemented";
645  G4Exception("G4MolecularInteractionTable::CanInteractWith", "",
646  FatalErrorInArgument, errMsg);
647  return 0;
648  }
649  ReactionDataMV::const_iterator it = fReactionDataMV.find(molecule);
650 
651  if (it == fReactionDataMV.end())
652  {
653  G4cout << "Nom : " << molecule->GetName() << G4endl;
654  G4String errMsg = "No reaction table was implemented for this molecule Definition : "
655  + molecule -> GetName();
656  G4Exception("G4MolecularInteractionTable::GetReactionData","",FatalErrorInArgument, errMsg);
657  return 0; // coverity
658  }
659 
660  return &(it->second);
661 }
662 
663 //______________________________________________________________________________
664 
667  const G4String& mol2) const
668 {
670  ->GetConfiguration(mol1);
672  ->GetConfiguration(mol2);
673 
674  return GetReactionData(conf1, conf2);
675 }
676 
677 //______________________________________________________________________________
678 
679 void
681 SetPolynomialParameterization(const std::vector<double>& P)
682 {
683  fRateParam = std::bind(PolynomialParam, std::placeholders::_1, P);
684 }
685 
686 //______________________________________________________________________________
687 
689  double E_R)
690 {
691  std::vector<double> P = {A0, E_R};
692 
693  G4cout << "ici = " << P[0] << G4endl;
694  G4cout << "A0 = " << A0 << G4endl;
695 
696  fRateParam = std::bind(ArrehniusParam, std::placeholders::_1, P);
697 }
698 
699 //______________________________________________________________________________
700 
702  double rateCste)
703 {
704  fRateParam = std::bind(ScaledParameterization,
705  std::placeholders::_1,
706  temperature_K,
707  rateCste);
708 }
709 
710 //______________________________________________________________________________
711 
713 {
714  size_t end = fVectorOfReactionData.size();
715 
716  for(size_t i = 0 ; i < end ; ++i)
717  {
719  ScaleForNewTemperature(temp_K);
720  }
721 }
722 
723 //______________________________________________________________________________
724 
726 {
727  if(fRateParam)
728  {
730 
731 // G4cout <<"PROD RATE = " << fProductionRate << G4endl;
732 //
733 // if(fProductionRate != DBL_MAX && fProductionRate !=0)
734 // {
735 // SetPartiallyDiffusionControlledReactionByActivation(fObservedReactionRate,
736 // fProductionRate);
737 // }
738  }
739 }
740 
741 //______________________________________________________________________________
742 
745 {
746  for(size_t i = 0 ; i < fVectorOfReactionData.size() ; ++i)
747  {
748  if(fVectorOfReactionData[i]->GetReactionID() == reactionID)
749  return fVectorOfReactionData[i];
750  }
751  return nullptr;
752 }
The pointer G4MolecularConfiguration will be shared by all the molecules having the same molecule def...
G4double GetDiffusionCoefficient() const
Returns the diffusion coefficient D.
G4VDNAReactionModel is an interface used by the G4DNAMolecularReaction process.
const G4String & GetName() const
Returns the name of the molecule.
const G4DNAMolecularReactionData * GetReaction(int reactionID) const
Free interface to define reaction information.
static G4DNAMolecularReactionTable * Instance()
const G4DNAMolecularReactionData * GetReactionData(G4MolecularConfiguration *, G4MolecularConfiguration *) const
static const double m3
Definition: G4SIunits.hh:130
static double PolynomialParam(double temp_K, std::vector< double > P)
static const double nanometer
Definition: G4SIunits.hh:100
void ScaleReactionRateForNewTemperature(double temp_K)
G4ReactionTableMessenger * fpMessenger
G4DNAMolecularReactionTable sorts out the G4DNAMolecularReactionData for bimolecular reaction...
static G4String ConvertToString(G4bool boolVal)
Definition: G4UIcommand.cc:371
void SetReactant1(G4MolecularConfiguration *reactive)
int G4int
Definition: G4Types.hh:78
static double P[]
static G4DNAMolecularReactionTable * GetReactionTable()
const std::map< G4MolecularConfiguration *, const G4DNAMolecularReactionData * > * GetReativesNData(G4MolecularConfiguration *) const
static const double s
Definition: G4SIunits.hh:168
void SetReaction(G4double observedReactionRate, G4MolecularConfiguration *reactive1, G4MolecularConfiguration *reactive2)
Define a reaction : First argument : reaction rate Second argument : reactant 1 Third argument : reac...
G4GLOB_DLL std::ostream G4cout
void SetReactionTable(const G4DNAMolecularReactionTable *)
virtual G4double GetReactionRadius(G4MolecularConfiguration *, G4MolecularConfiguration *)=0
static double DiffCoeffWater(double temperature_K)
static G4MoleculeTable * Instance()
void SetArrehniusParameterization(double A0, double E_R)
void PrintTable(G4VDNAReactionModel *=0)
#define TRUE
Definition: globals.hh:55
G4MolecularConfiguration * fReactant1
const G4int n
void AddProduct(G4MolecularConfiguration *molecule)
static double ArrehniusParam(double temp_K, std::vector< double > P)
static G4DNAMolecularReactionTable * fInstance
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static double ScaledParameterization(double temp_K, double temp_init, double rateCste_init)
G4DNAMolecularReactionData contains the information relative to a given reaction (eg : °OH + °OH -> H...
void SetObservedReactionRateConstant(G4double rate)
void SetReactants(G4MolecularConfiguration *reactive1, G4MolecularConfiguration *reactive2)
static const double pi
Definition: G4SIunits.hh:74
std::vector< G4MolecularConfiguration * > * fProducts
void SetReactant2(G4MolecularConfiguration *reactive)
static G4MoleculeTable * GetMoleculeTable()
G4MolecularConfiguration * GetReactant1() const
void SetPolynomialParameterization(const std::vector< double > &P)
void SetScaledParameterization(double temperature_K, double rateCste)
static const double mole
Definition: G4SIunits.hh:283
G4MolecularConfiguration * GetReactant2() const
#define G4endl
Definition: G4ios.hh:61
G4MolecularConfiguration * fReactant2
const G4DNAMolecularReactionTable * GetReactionTable()
double G4double
Definition: G4Types.hh:76
std::vector< const G4DNAMolecularReactionData * > fVectorOfReactionData
const std::vector< G4MolecularConfiguration * > * CanReactWith(G4MolecularConfiguration *) const
Given a molecule's type, it returns with which a reaction is allowed.
G4MolecularConfiguration * GetProduct(G4int i) const
virtual void InitialiseToPrint(G4MolecularConfiguration *)=0
G4MolecularConfiguration * GetConfiguration(const G4String &, bool mustExist=true)