Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes
G4DNAMolecularReactionTable Class Reference

#include <G4DNAMolecularReactionTable.hh>

Inheritance diagram for G4DNAMolecularReactionTable:
G4ITReactionTable

Public Member Functions

virtual ~G4DNAMolecularReactionTable ()
 
void SetReaction (G4double observedReactionRate, const G4Molecule *reactive1, const G4Molecule *reactive2)
 
void SetReaction (G4DNAMolecularReactionData *)
 
const G4DNAMolecularReactionDataGetReactionData (const G4Molecule *, const G4Molecule *) const
 
const std::vector< const
G4Molecule * > * 
CanReactWith (const G4Molecule *aMolecule) const
 
const std::map< const
G4Molecule *, const
G4DNAMolecularReactionData
*, compMoleculeP > * 
GetReativesNData (const G4Molecule *aMolecule) const
 
const std::vector< const
G4DNAMolecularReactionData * > * 
GetReactionData (const G4Molecule *) const
 
void PrintTable (G4VDNAReactionModel *=0)
 
- Public Member Functions inherited from G4ITReactionTable
 G4ITReactionTable ()
 
virtual ~G4ITReactionTable ()
 
 G4ITReactionTable (const G4ITReactionTable &)
 
G4ITReactionTableoperator= (const G4ITReactionTable &)
 

Static Public Member Functions

static
G4DNAMolecularReactionTable
GetReactionTable ()
 
static void DeleteInstance ()
 

Protected Types

typedef std::map< const
G4Molecule *, std::map< const
G4Molecule *, const
G4DNAMolecularReactionData
*, compMoleculeP >
, compMoleculeP
ReactionDataMap
 
typedef std::map< const
G4Molecule *, std::vector
< const G4Molecule * >
, compMoleculeP
ReactivesMV
 
typedef std::map< const
G4Molecule *, std::vector
< const
G4DNAMolecularReactionData * >
, compMoleculeP
ReactionDataMV
 

Protected Member Functions

 G4DNAMolecularReactionTable ()
 

Protected Attributes

const G4MoleculeHandleManagerfMoleculeHandleManager
 
G4bool fVerbose
 
ReactionDataMap fReactionData
 
ReactivesMV fReactivesMV
 
ReactionDataMV fReactionDataMV
 

Static Protected Attributes

static
G4DNAMolecularReactionTable
fInstance
 

Detailed Description

G4DNAMolecularReactionTable sorts out the G4DNAMolecularReactionData for bimolecular reaction

Definition at line 111 of file G4DNAMolecularReactionTable.hh.

Member Typedef Documentation

Definition at line 159 of file G4DNAMolecularReactionTable.hh.

Definition at line 161 of file G4DNAMolecularReactionTable.hh.

typedef std::map<const G4Molecule*,std::vector<const G4Molecule*>,compMoleculeP> G4DNAMolecularReactionTable::ReactivesMV
protected

Definition at line 160 of file G4DNAMolecularReactionTable.hh.

Constructor & Destructor Documentation

G4DNAMolecularReactionTable::G4DNAMolecularReactionTable ( )
protected

Definition at line 130 of file G4DNAMolecularReactionTable.cc.

References fVerbose.

Referenced by GetReactionTable().

130  : G4ITReactionTable(),
132 {
133 // G4cout << "G4DNAMolecularReactionTable::G4DNAMolecularReactionTable()" << G4endl;
134  fVerbose = false;
135  return;
136 }
const G4MoleculeHandleManager * fMoleculeHandleManager
static G4MoleculeHandleManager * Instance()
G4DNAMolecularReactionTable::~G4DNAMolecularReactionTable ( )
virtual

Definition at line 138 of file G4DNAMolecularReactionTable.cc.

References fReactionData, fReactionDataMV, fReactivesMV, G4DNAMolecularReactionData::GetReactive1(), and G4DNAMolecularReactionData::GetReactive2().

139 {
140  // DEBUG
141 // G4cout << "G4MolecularReactionTable::~G4MolecularReactionTable" << G4endl;
142  ReactionDataMap::iterator it1 = fReactionData.begin();
143 
144  std::map<const G4Molecule*,
146  compMoleculeP>::iterator it2;
147 
148  for(;it1!=fReactionData.end();it1++)
149  {
150  for(it2 = it1->second.begin();it2 != it1->second.end();it2++)
151  {
152  const G4DNAMolecularReactionData* reactionData = it2->second;
153  if(reactionData)
154  {
155  const G4Molecule* reactive1 = reactionData->GetReactive1();
156  const G4Molecule* reactive2 = reactionData->GetReactive2();
157 
158  fReactionData[reactive1][reactive2] = 0;
159  fReactionData[reactive2][reactive1] = 0;
160 
161  delete reactionData;
162  }
163  }
164  }
165 
166  fReactionDataMV.clear();
167  fReactionData.clear();
168  fReactivesMV.clear();
169 }
const G4Molecule * GetReactive2() const
const G4Molecule * GetReactive1() const

Member Function Documentation

const std::vector< const G4Molecule * > * G4DNAMolecularReactionTable::CanReactWith ( const G4Molecule aMolecule) const

Given a molecule's type, it returns with which a reaction is allowed

Definition at line 387 of file G4DNAMolecularReactionTable.cc.

References FatalErrorInArgument, fReactivesMV, fVerbose, G4cout, G4endl, G4Exception(), and G4Molecule::GetName().

Referenced by PrintTable().

388 {
389  if(fReactivesMV.empty())
390  {
391  G4String errMsg = "No reaction table was implemented";
392  G4Exception("G4MolecularInteractionTable::CanReactWith","",FatalErrorInArgument, errMsg);
393  return 0;
394  }
395 
396  ReactivesMV::const_iterator itReactivesMap = fReactivesMV.find(aMolecule) ;
397 
398  if(itReactivesMap == fReactivesMV.end())
399  {
400  G4cout<<"Nom : " << aMolecule->GetName()<<G4endl;
401  G4String errMsg = "No reaction table was implemented for this molecule Definition : "
402  + aMolecule -> GetName();
403  G4Exception("G4MolecularInteractionTable::CanReactWith","",FatalErrorInArgument, errMsg);
404  return 0;
405  }
406  else
407  {
408  if(fVerbose)
409  {
410  G4cout<< " G4MolecularInteractionTable::CanReactWith :"<<G4endl;
411  G4cout<<"You are checking reactants for : " << aMolecule->GetName()<<G4endl;
412  G4cout<<" the number of reactants is : " << itReactivesMap->second.size()<<G4endl;
413 
414  std::vector<const G4Molecule*>::const_iterator itProductsVector =
415  itReactivesMap->second.begin();
416 
417  for( ; itProductsVector != itReactivesMap->second.end(); itProductsVector++)
418  {
419  G4cout<<(*itProductsVector)->GetName()<<G4endl;
420  }
421  }
422  return &(itReactivesMap->second);
423  }
424  return 0;
425 }
const G4String & GetName() const
Definition: G4Molecule.cc:243
G4GLOB_DLL std::ostream G4cout
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define G4endl
Definition: G4ios.hh:61
void G4DNAMolecularReactionTable::DeleteInstance ( )
static

Definition at line 121 of file G4DNAMolecularReactionTable.cc.

References fInstance.

122 {
123  // DEBUG
124 // G4cout << "G4MolecularReactionTable::DeleteInstance" << G4endl;
125  if(fInstance)
126  delete fInstance;
127  fInstance = 0;
128 }
static G4DNAMolecularReactionTable * fInstance
const G4DNAMolecularReactionData * G4DNAMolecularReactionTable::GetReactionData ( const G4Molecule reactive1,
const G4Molecule reactive2 
) const

Definition at line 351 of file G4DNAMolecularReactionTable.cc.

References FatalErrorInArgument, fReactionData, G4cout, G4endl, G4Exception(), and G4Molecule::GetName().

Referenced by G4DNASmoluchowskiReactionModel::Initialise(), G4DNASmoluchowskiReactionModel::InitialiseToPrint(), and G4DNAMolecularReaction::MakeReaction().

353 {
354  if(fReactionData.empty())
355  {
356  G4String errMsg = "No reaction table was implemented";
357  G4Exception("G4MolecularInteractionTable::CanInteractWith","",FatalErrorInArgument, errMsg);
358  return 0;
359  }
360 
361  ReactionDataMap::const_iterator it1 = fReactionData.find(reactive1);
362 
363  if(it1 == fReactionData.end())
364  {
365  G4cout<<"Nom : " << reactive1->GetName()<<G4endl;
366  G4String errMsg = "No reaction table was implemented for this molecule Definition : "
367  + reactive1 -> GetName();
368  G4Exception("G4MolecularInteractionTable::CanReactWith","",FatalErrorInArgument, errMsg);
369  }
370 
371  std::map<const G4Molecule*,
373  compMoleculeP>::const_iterator it2 = it1->second.find(reactive2);
374 
375  if(it2 == it1->second.end())
376  {
377  G4cout<<"Nom : " << reactive2->GetName()<<G4endl;
378  G4String errMsg = "No reaction table was implemented for this molecule Definition : "
379  + reactive2 -> GetName();
380  G4Exception("G4MolecularInteractionTable::CanReactWith","",FatalErrorInArgument, errMsg);
381  }
382 
383  return (it2->second);
384 }
const G4String & GetName() const
Definition: G4Molecule.cc:243
G4GLOB_DLL std::ostream G4cout
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define G4endl
Definition: G4ios.hh:61
const std::vector< const G4DNAMolecularReactionData * > * G4DNAMolecularReactionTable::GetReactionData ( const G4Molecule molecule) const

Definition at line 473 of file G4DNAMolecularReactionTable.cc.

References FatalErrorInArgument, fReactionDataMV, G4cout, G4endl, G4Exception(), and G4Molecule::GetName().

474 {
475  if(fReactionDataMV.empty())
476  {
477  G4String errMsg = "No reaction table was implemented";
478  G4Exception("G4MolecularInteractionTable::CanInteractWith","",FatalErrorInArgument, errMsg);
479  return 0 ;
480  }
481  ReactionDataMV::const_iterator it = fReactionDataMV.find(molecule) ;
482 
483  if(it == fReactionDataMV.end())
484  {
485  G4cout<<"Nom : " << molecule->GetName()<<G4endl;
486  G4String errMsg = "No reaction table was implemented for this molecule Definition : "
487  + molecule -> GetName();
488  G4Exception("G4MolecularInteractionTable::GetReactionData","",FatalErrorInArgument, errMsg);
489  return 0; // coverity
490  }
491 
492  return &(it->second);
493 }
const G4String & GetName() const
Definition: G4Molecule.cc:243
G4GLOB_DLL std::ostream G4cout
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define G4endl
Definition: G4ios.hh:61
G4DNAMolecularReactionTable * G4DNAMolecularReactionTable::GetReactionTable ( )
static

Definition at line 112 of file G4DNAMolecularReactionTable.cc.

References fInstance, and G4DNAMolecularReactionTable().

113 {
114  if(!fInstance)
115  {
117  }
118  return fInstance;
119 }
static G4DNAMolecularReactionTable * fInstance
const std::map< const G4Molecule *, const G4DNAMolecularReactionData *, compMoleculeP > * G4DNAMolecularReactionTable::GetReativesNData ( const G4Molecule aMolecule) const

Definition at line 429 of file G4DNAMolecularReactionTable.cc.

References FatalErrorInArgument, fReactionData, fVerbose, G4cout, G4endl, G4Exception(), and G4Molecule::GetName().

430 {
431 
432  if(fReactionData.empty())
433  {
434  G4String errMsg = "No reaction table was implemented";
435  G4Exception("G4MolecularInteractionTable::CanInteractWith","",FatalErrorInArgument, errMsg);
436  return 0;
437  }
438 
439  ReactionDataMap::const_iterator itReactivesMap = fReactionData.find(molecule) ;
440 
441  if(itReactivesMap == fReactionData.end())
442  {
443  G4cout<<"Nom : " << molecule->GetName()<<G4endl;
444  G4String errMsg = "No reaction table was implemented for this molecule Definition : "
445  + molecule -> GetName();
446  G4Exception("G4MolecularInteractionTable::CanReactWith","",FatalErrorInArgument, errMsg);
447  }
448  else
449  {
450  if(fVerbose)
451  {
452  G4cout<< " G4MolecularInteractionTable::CanReactWith :"<<G4endl;
453  G4cout<<"You are checking reactants for : " << molecule->GetName()<<G4endl;
454  G4cout<<" the number of reactants is : " << itReactivesMap->second.size()<<G4endl;
455 
456  std::map<const G4Molecule*,
458  compMoleculeP>::const_iterator itProductsVector =
459  itReactivesMap->second.begin();
460 
461  for( ; itProductsVector != itReactivesMap->second.end(); itProductsVector++)
462  {
463  G4cout<<itProductsVector->first->GetName()<<G4endl;
464  }
465  }
466  return &(itReactivesMap->second);
467  }
468 
469  return 0;
470 }
G4GLOB_DLL std::ostream G4cout
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define G4endl
Definition: G4ios.hh:61
void G4DNAMolecularReactionTable::PrintTable ( G4VDNAReactionModel pReactionModel = 0)

Definition at line 196 of file G4DNAMolecularReactionTable.cc.

References CanReactWith(), G4UIcommand::ConvertToString(), fReactionData, fReactivesMV, G4cout, G4endl, G4Molecule::GetName(), G4DNAMolecularReactionData::GetNbProducts(), G4DNAMolecularReactionData::GetProduct(), G4VDNAReactionModel::GetReactionRadius(), G4DNAMolecularReactionData::GetReactionRate(), G4VDNAReactionModel::GetReactionTable(), left, python.hepunit::m3, python.hepunit::mole, n, python.hepunit::nanometer, title(), and TRUE.

197 {
198  // Print Reactions and Interaction radius for jump step = 3ps
199 
200  if(pReactionModel)
201  {
202  if(!(pReactionModel->GetReactionTable()))
203  pReactionModel -> SetReactionTable(this);
204  }
205 
206  ReactivesMV::iterator itReactives;
207 
208  map<G4Molecule*,map<G4Molecule*, G4bool> > alreadyPrint;
209 
210  G4cout<<"Nombre particules intervenants dans les reactions = "<< fReactivesMV.size() <<G4endl;
211 
212  G4int nbPrintable = fReactivesMV.size()*fReactivesMV.size();
213 
214  G4String *outputReaction = new G4String[nbPrintable];
215  G4String *outputReactionRate = new G4String[nbPrintable];
216  G4String *outputRange = new G4String[nbPrintable];
217  G4int n = 0;
218 
219  for(itReactives = fReactivesMV.begin() ; itReactives != fReactivesMV.end() ; itReactives++)
220  {
221  G4Molecule* moleculeA = (G4Molecule*) itReactives->first;
222  const vector<const G4Molecule*>* reactivesVector = CanReactWith(moleculeA);
223 
224  if(pReactionModel)
225  pReactionModel -> InitialiseToPrint(moleculeA);
226 
227  G4int nbReactants = fReactivesMV[itReactives->first].size();
228 
229  for(G4int iReact = 0 ; iReact < nbReactants ; iReact++)
230  {
231 
232  G4Molecule* moleculeB = (G4Molecule*) (*reactivesVector)[iReact];
233 
234  const G4DNAMolecularReactionData* reactionData = fReactionData[moleculeA][moleculeB];
235 
236  //-----------------------------------------------------------
237  // Name of the reaction
238  if(!alreadyPrint[moleculeA][moleculeB])
239  {
240  outputReaction[n]=
241  moleculeA->GetName()
242  +" + " +
243  moleculeB->GetName();
244 
245  G4int nbProducts = reactionData->GetNbProducts();
246 
247  if(nbProducts)
248  {
249  outputReaction[n] += " -> "+ reactionData->GetProduct(0)->GetName();
250 
251  for(G4int j = 1 ; j < nbProducts ; j++)
252  {
253  outputReaction[n]+=" + "+reactionData->GetProduct(j)->GetName();
254  }
255  }
256  else
257  {
258  outputReaction[n]+=" -> No product";
259  }
260 
261  //-----------------------------------------------------------
262  // Interaction Rate
263  outputReactionRate[n] = G4UIcommand::ConvertToString(reactionData->GetReactionRate()/(1e-3*m3/(mole*s)));
264 
265  //-----------------------------------------------------------
266  // Calculation of the Interaction Range
267  G4double interactionRange = -1;
268  if(pReactionModel)
269  interactionRange = pReactionModel->GetReactionRadius(iReact);
270 
271  if(interactionRange!=-1)
272  {
273  outputRange[n] = G4UIcommand::ConvertToString(interactionRange/nanometer);
274  }
275  else
276  {
277  outputRange[n] = "";
278  }
279 
280  alreadyPrint[moleculeB][moleculeA] = TRUE;
281  n++;
282  }
283  }
284  }
285  G4cout<<"Number of possible reactions: "<< n << G4endl;
286 
287  ////////////////////////////////////////////////////////////////////
288  // Tableau dynamique en fonction du nombre de caractere maximal dans
289  // chaque colonne
290  ////////////////////////////////////////////////////////////////////
291 
292  G4int maxlengthOutputReaction = -1;
293  G4int maxlengthOutputReactionRate = -1;
294 
295  for(G4int i = 0 ; i < n ; i++)
296  {
297  if(maxlengthOutputReaction < (G4int) outputReaction[i].length())
298  {
299  maxlengthOutputReaction = outputReaction[i].length();
300  }
301  if(maxlengthOutputReactionRate < (G4int)outputReactionRate[i].length())
302  {
303  maxlengthOutputReactionRate = outputReactionRate[i].length();
304  }
305  }
306 
307  maxlengthOutputReaction+=2;
308  maxlengthOutputReactionRate+=2;
309 
310  if(maxlengthOutputReaction<10) maxlengthOutputReaction = 10;
311  if(maxlengthOutputReactionRate<30) maxlengthOutputReactionRate = 30;
312 
313  G4String title[3];
314 
315  title[0] = "Reaction";
316  title[1] = "Reaction Rate [dm3/(mol*s)]";
317  title[2] = "Interaction Range for chosen reaction model";
318 
319  G4cout<< setfill(' ')
320  << setw(maxlengthOutputReaction) << left << title[0]
321  << setw(maxlengthOutputReactionRate) << left << title[1]
322  << setw(2) << left << title[2]
323  << G4endl;
324 
325  G4cout.fill('-');
326  G4cout.width(maxlengthOutputReaction+2+maxlengthOutputReactionRate+2+(G4int)title[2].length());
327  G4cout<<"-"<<G4endl;
328  G4cout.fill(' ');
329 
330  for(G4int i = 0 ; i < n ; i ++)
331  {
332  G4cout<< setw(maxlengthOutputReaction)<< left << outputReaction[i]
333  << setw(maxlengthOutputReactionRate) << left << outputReactionRate[i]
334  << setw(2) << left <<outputRange[i]
335  <<G4endl;
336 
337  G4cout.fill('-');
338  G4cout.width(maxlengthOutputReaction+2+maxlengthOutputReactionRate+2+(G4int)title[2].length());
339  G4cout<<"-"<<G4endl;
340  G4cout.fill(' ');
341  }
342 
343  delete [] outputReaction;
344  delete [] outputReactionRate;
345  delete [] outputRange;
346 }
const XML_Char * s
static G4String ConvertToString(G4bool boolVal)
Definition: G4UIcommand.cc:357
int G4int
Definition: G4Types.hh:78
int nanometer
Definition: hepunit.py:35
const G4String & GetName() const
Definition: G4Molecule.cc:243
const G4Molecule * GetProduct(G4int i) const
G4GLOB_DLL std::ostream G4cout
#define TRUE
Definition: globals.hh:55
const G4int n
subroutine title(NA, NB, NCA, NCB)
Definition: dpm25nuc7.f:1744
virtual G4double GetReactionRadius(const G4Molecule *, const G4Molecule *)=0
#define G4endl
Definition: G4ios.hh:61
const G4DNAMolecularReactionTable * GetReactionTable()
double G4double
Definition: G4Types.hh:76
const std::vector< const G4Molecule * > * CanReactWith(const G4Molecule *aMolecule) const
void G4DNAMolecularReactionTable::SetReaction ( G4double  observedReactionRate,
const G4Molecule reactive1,
const G4Molecule reactive2 
)

Define a reaction : First argument : reaction rate Second argument : reactant 1 Third argument : reactant 2 Fourth argument : a std std::vector holding the molecular products if this last argument is NULL then it will be interpreted as a reaction giving no products

Definition at line 188 of file G4DNAMolecularReactionTable.cc.

191 {
192  G4DNAMolecularReactionData* reactionData = new G4DNAMolecularReactionData(reactionRate, reactive1, reactive2);
193  SetReaction(reactionData);
194 }
void SetReaction(G4double observedReactionRate, const G4Molecule *reactive1, const G4Molecule *reactive2)
void G4DNAMolecularReactionTable::SetReaction ( G4DNAMolecularReactionData reactionData)

Definition at line 171 of file G4DNAMolecularReactionTable.cc.

References fReactionData, fReactionDataMV, fReactivesMV, G4DNAMolecularReactionData::GetReactive1(), and G4DNAMolecularReactionData::GetReactive2().

172 {
173  const G4Molecule* reactive1 = reactionData->GetReactive1() ;
174  const G4Molecule* reactive2 = reactionData->GetReactive2() ;
175 
176  fReactionData[reactive1][reactive2] = reactionData;
177  fReactivesMV[reactive1].push_back(reactive2);
178  fReactionDataMV[reactive1].push_back(reactionData);
179 
180  if(reactive1 != reactive2)
181  {
182  fReactionData[reactive2][reactive1] = reactionData;
183  fReactivesMV[reactive2].push_back(reactive1);
184  fReactionDataMV[reactive2].push_back(reactionData);
185  }
186 }
const G4Molecule * GetReactive2() const
const G4Molecule * GetReactive1() const

Field Documentation

G4DNAMolecularReactionTable * G4DNAMolecularReactionTable::fInstance
staticprotected

Definition at line 115 of file G4DNAMolecularReactionTable.hh.

Referenced by DeleteInstance(), and GetReactionTable().

const G4MoleculeHandleManager* G4DNAMolecularReactionTable::fMoleculeHandleManager
protected

Definition at line 151 of file G4DNAMolecularReactionTable.hh.

ReactionDataMap G4DNAMolecularReactionTable::fReactionData
protected
ReactionDataMV G4DNAMolecularReactionTable::fReactionDataMV
protected
ReactivesMV G4DNAMolecularReactionTable::fReactivesMV
protected
G4bool G4DNAMolecularReactionTable::fVerbose
protected

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