File indexing completed on 2025-02-23 09:21:58
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 #ifndef MolecularIRTDamageReactionModel_hh
0029 #define MolecularIRTDamageReactionModel_hh
0030
0031 #include "G4LogicalVolume.hh"
0032 #include "G4String.hh"
0033 #include "G4ThreeVector.hh"
0034 #include "G4VDNAHitModel.hh"
0035 #include "globals.hh"
0036
0037 class DNAGeometry;
0038
0039 class G4DNAComponentNode;
0040
0041 class G4MolecularConfiguration;
0042
0043 class G4DNAMolecularReactionTable;
0044
0045
0046
0047 class IRTDamageReactionModel : public G4VDNAHitModel
0048 {
0049 public:
0050 explicit IRTDamageReactionModel(const G4String& name);
0051
0052 ~IRTDamageReactionModel() override = default;
0053
0054 IRTDamageReactionModel& operator=(const IRTDamageReactionModel& right) = delete;
0055
0056 IRTDamageReactionModel(const IRTDamageReactionModel&) = delete;
0057
0058 using DNANode = std::variant<const G4DNAComponentNode*,
0059 const G4VPhysicalVolume* >;
0060
0061 G4double CalculateReactionTime(const G4Track& trackA, DNANode&) override;
0062
0063 G4bool DoReaction(const G4Track& track, const G4double&, const DNANode&) override;
0064
0065 private:
0066 G4double GetTimeToEncounter(const G4MolecularConfiguration* molA,
0067 const G4MolecularConfiguration* molB, const G4double& distance);
0068
0069 void MakeReaction(const G4Track& track);
0070
0071 void RecordDNADamage() const;
0072
0073 const G4VPhysicalVolume* fpDNAPhyVolume = nullptr;
0074 const G4Track* fpTrack = nullptr;
0075 G4double fminTimeStep = DBL_MAX;
0076 G4double fReactionTime = DBL_MAX;
0077 DNAGeometry* fpDNAGeometry;
0078 const G4DNAMolecularReactionTable* fMolecularReactionTable;
0079 };
0080
0081
0082
0083 #endif