File indexing completed on 2025-01-18 09:58:01
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #ifndef G4ChemEquilibrium_hh
0032 #define G4ChemEquilibrium_hh 1
0033 #include "globals.hh"
0034 #include "G4MoleculeTable.hh"
0035 #include "G4UnitsTable.hh"
0036
0037 class G4DNAMolecularReactionData;
0038 class G4ChemEquilibrium
0039 {
0040 public:
0041 using MolType = const G4MolecularConfiguration*;
0042 using Reaction = const G4DNAMolecularReactionData*;
0043 explicit G4ChemEquilibrium(const G4int& type, const G4double& time);
0044 ~G4ChemEquilibrium() = default;
0045 void Initialize();
0046 inline G4bool IsStatusChanged()
0047 {
0048 if(fStatus == fAddEquilibrium){
0049 return false;
0050 }else
0051 {
0052 fStatus = fAddEquilibrium;
0053 if(fVerbose > 0)
0054 {
0055 PrintInfo();
0056 }
0057 return true;
0058 }
0059 }
0060
0061 inline void Reset()
0062 {
0063 fStatus = false;
0064 fAddEquilibrium = false;
0065 fEquilibriumTime = 0;
0066 fGlobalTime = 0;
0067 }
0068
0069 inline void SetVerbose(const G4int& verbose)
0070 {
0071 fVerbose = verbose;
0072 }
0073
0074 inline void SetGlobalTime(const G4double& time)
0075 {
0076 fGlobalTime = time;
0077
0078 if(fGlobalTime - fEquilibriumTime > fEquilibriumDuration && fAddEquilibrium)
0079 {
0080 fAddEquilibrium = false;
0081 if(fVerbose) {
0082 G4cout << "SetEquilibrium : off " << fRectionType
0083 << " fGlobalTime : " << G4BestUnit(fGlobalTime, "Time")
0084 << " fEquilibriumTime8 : " << G4BestUnit(fEquilibriumTime, "Time")
0085 << " fAddEquilibrium : " << fAddEquilibrium << G4endl;
0086 }
0087 }
0088 }
0089 void SetEquilibrium(Reaction pReaction);
0090
0091 inline G4bool GetEquilibriumStatus() const
0092 {
0093 return fAddEquilibrium;
0094 }
0095
0096 void PrintInfo() const;
0097 private:
0098 G4bool fStatus = false;
0099 G4bool fAddEquilibrium = false;
0100 G4double fEquilibriumTime = 0;
0101 const G4double fEquilibriumDuration = 0;
0102 G4int fRectionType = 0;
0103 MolType fReactant1 = nullptr;
0104 MolType fReactant2 = nullptr;
0105 MolType fReactantB1 = nullptr;
0106 MolType fReactantB2 = nullptr;
0107 G4double fGlobalTime = 0;
0108 G4int fVerbose = 1;
0109 };
0110
0111 #endif