00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef G4DNASECONDORDERREACTION_HH
00040 #define G4DNASECONDORDERREACTION_HH
00041
00042 #include "G4VITProcess.hh"
00043
00044 class G4MolecularConfiguration;
00045
00046 class G4DNASecondOrderReaction : public G4VITProcess
00047 {
00048 public:
00049 G4DNASecondOrderReaction(const G4String& aName = "DNASecondOrderReaction",
00050 G4ProcessType type = fDecay);
00051 virtual ~G4DNASecondOrderReaction();
00052
00053 G4IT_ADD_CLONE(G4VITProcess,G4DNASecondOrderReaction)
00054
00055 G4DNASecondOrderReaction(const G4DNASecondOrderReaction&);
00056 G4DNASecondOrderReaction& operator=(const G4DNASecondOrderReaction&);
00057 void StartTracking(G4Track*);
00058
00059 void SetReaction(const G4MolecularConfiguration*, const G4Material*, double );
00060
00061 public :
00062 virtual void BuildPhysicsTable(const G4ParticleDefinition&);
00063 virtual G4double PostStepGetPhysicalInteractionLength(
00064 const G4Track& track,
00065 G4double previousStepSize,
00066 G4ForceCondition* condition
00067 );
00068
00069 virtual G4VParticleChange* PostStepDoIt(
00070 const G4Track& ,
00071 const G4Step&
00072 );
00073
00074 virtual G4double AtRestGetPhysicalInteractionLength(
00075 const G4Track& ,
00076 G4ForceCondition*
00077 ){ return -1.0; }
00078
00079 virtual G4VParticleChange* AtRestDoIt(
00080 const G4Track& ,
00081 const G4Step&
00082 ){return 0;}
00083
00084
00085 virtual G4double AlongStepGetPhysicalInteractionLength(
00086 const G4Track&,
00087 G4double ,
00088 G4double ,
00089 G4double& ,
00090 G4GPILSelection*
00091 ){ return -1.0; }
00092
00093
00094 virtual G4VParticleChange* AlongStepDoIt(
00095 const G4Track& ,
00096 const G4Step&
00097 ) {return 0;}
00098
00099 protected:
00100 struct SecondOrderReactionState : public G4ProcessState
00101 {
00102 SecondOrderReactionState();
00103 virtual ~SecondOrderReactionState(){;}
00104 G4double fPreviousTimeAtPreStepPoint;
00105 G4bool fIsInGoodMaterial;
00106 };
00107
00108 private :
00109 void Create();
00110
00111 protected:
00112 G4bool fIsInitialized;
00113
00114 G4double fReturnedValue;
00115
00116 const std::vector<double>* fpMoleculeDensity;
00117 G4double fReactionRate;
00118 G4double fConcentration;
00119 G4double fMolarMassOfMaterial;
00120 SecondOrderReactionState*& fpSecondOrderReactionState;
00121 G4ParticleChange fParticleChange;
00122
00123 const G4MolecularConfiguration* fpMolecularConfiguration;
00124 const G4Material* fpMaterial;
00125 };
00126
00127 #endif // G4DNASECONDORDERREACTION_HH