Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 #include "TimeStepAction.hh" 28 29 #include "ChromosomeMapper.hh" 30 #include "DNAGeometry.hh" 31 #include "DNAHit.hh" 32 #include "DetectorConstruction.hh" 33 #include "EventAction.hh" 34 #include "OctreeNode.hh" 35 36 #include "G4DNAMolecularReactionTable.hh" 37 #include "G4ITTrackHolder.hh" 38 #include "G4ITTrackingManager.hh" 39 #include "G4Molecule.hh" 40 #include "G4RunManager.hh" 41 42 //....oooOO0OOooo........oooOO0OOooo........oo 43 TimeStepAction::TimeStepAction(EventAction* ev 44 : G4UserTimeStepAction(), 45 fEventAction(event), 46 fRadicalKillDistance(4.5 * nm), 47 fpChemistryTrackHolder(G4ITTrackHolder::In 48 { 49 AddTimeStep(1 * picosecond, 0.5 * nanosecond 50 // ctor 51 } 52 53 //....oooOO0OOooo........oooOO0OOooo........oo 54 55 TimeStepAction::~TimeStepAction() = default; 56 //....oooOO0OOooo........oooOO0OOooo........oo 57 58 void TimeStepAction::StartProcessing() 59 { 60 auto det = dynamic_cast<const DetectorConstr 61 G4RunManager::GetRunManager()->GetUserDete 62 fDNAGeometry = det->GetDNAGeometry(); 63 if (fDNAGeometry == nullptr) { 64 G4ExceptionDescription exceptionDescriptio 65 exceptionDescription << "fDNAGeometry is n 66 G4Exception( 67 "TimeStepAction" 68 "StartProcessing", 69 "no fDNAGeometry", FatalException, excep 70 } 71 72 fRadicalKillDistance = fDNAGeometry->GetRadi 73 } 74 75 //....oooOO0OOooo........oooOO0OOooo........oo 76 77 void TimeStepAction::UserPostTimeStepAction() 78 { 79 RadicalKillDistance(); 80 } 81 82 //....oooOO0OOooo........oooOO0OOooo........oo 83 84 void TimeStepAction::UserPreTimeStepAction() { 85 86 //....oooOO0OOooo........oooOO0OOooo........oo 87 88 void TimeStepAction::UserReactionAction(const 89 const 90 {} 91 92 //....oooOO0OOooo........oooOO0OOooo........oo 93 94 void TimeStepAction::RadicalKillDistance() 95 { 96 if (fpChemistryTrackHolder == nullptr) { 97 G4ExceptionDescription exceptionDescriptio 98 exceptionDescription << "fpChemistryTrackH 99 G4Exception( 100 "TimeStepAction" 101 "RadicalKillDistance", 102 "NO_fpChemistryTrackHolder", FatalExcept 103 } 104 G4Track* trackToKill; 105 G4TrackManyList::iterator it_begin = fpChemi 106 G4TrackManyList::iterator it_end = fpChemist 107 while (it_begin != it_end) { 108 trackToKill = nullptr; 109 110 const G4VTouchable* touchable = it_begin-> 111 if (touchable == nullptr) { 112 ++it_begin; 113 continue; 114 } 115 116 G4LogicalVolume* trackLV = touchable->GetV 117 G4LogicalVolume* motherLV = touchable->Get 118 119 OctreeNode* octree_track = fDNAGeometry->G 120 OctreeNode* octree_mother = fDNAGeometry-> 121 122 if ((octree_track == nullptr) && (octree_m 123 trackToKill = *it_begin; 124 } 125 else if (octree_track != nullptr) { 126 const G4AffineTransform& trans = it_begi 127 G4ThreeVector pos = trans.TransformPoint 128 size_t n = octree_track->SearchOctree(po 129 if (n == 0) { 130 trackToKill = *it_begin; 131 } 132 if (fDNAGeometry->IsInsideHistone(trackL 133 trackToKill = *it_begin; 134 } 135 } 136 else { 137 const G4AffineTransform& trans = it_begi 138 G4ThreeVector pos = trans.TransformPoint 139 if (fDNAGeometry->IsInsideHistone(trackL 140 trackToKill = *it_begin; 141 } 142 } 143 ++it_begin; 144 if (trackToKill != nullptr) { 145 fpChemistryTrackHolder->PushToKill(track 146 } 147 } 148 } 149 150 //....oooOO0OOooo........oooOO0OOooo........oo 151