diff --git a/examples/extended/medical/dna/dnadamage2/src/TimeStepAction.cc b/examples/extended/medical/dna/dnadamage2/src/TimeStepAction.cc new file mode 100644 index 0000000000000000000000000000000000000000..fbb4d2c1de8f25d96a8fe9c2fe0e3a3a12829af6 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/TimeStepAction.cc @@ -0,0 +1,126 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +// +/// \file TimeStepAction.hh +/// \brief Implementation of the TimeStepAction class +/// Filtering of molecules by material at the beggining of the chemical stage + +#include "TimeStepAction.hh" +#include "G4Scheduler.hh" +#include "G4UnitsTable.hh" +#include "G4SystemOfUnits.hh" +#include "G4Track.hh" +#include "G4Molecule.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +TimeStepAction::TimeStepAction() : G4UserTimeStepAction() +{;} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +TimeStepAction::~TimeStepAction() +{;} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +TimeStepAction::TimeStepAction(const TimeStepAction& other) : + G4UserTimeStepAction(other) +{;} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +TimeStepAction& +TimeStepAction::operator=(const TimeStepAction& rhs) +{ + if (this == &rhs) return *this; // handle self assignment + //assignment operator + return *this; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... +void TimeStepAction::UserPreTimeStepAction() +{ + G4int Steps = G4Scheduler::Instance()->GetNbSteps(); + + if (Steps == 1) { + G4int TotalMolecules = 0; + G4int KilledMolecules = 0; + G4int AcceptedMolecules = 0; + G4TrackManyList* trackList = G4ITTrackHolder::Instance()->GetMainList(); + G4ManyFastLists<G4Track>::iterator it_begin = trackList->begin(); + G4ManyFastLists<G4Track>::iterator it_end = trackList->end(); + + for(;it_begin!=it_end;++it_begin) { + TotalMolecules++; + G4String Material = it_begin->GetStep()-> + GetPreStepPoint()->GetMaterial()->GetName(); + G4String MoleculeName = GetMolecule(*it_begin)->GetName(); + if (Material != "G4_WATER" && !G4StrUtil::contains(MoleculeName,"DNA")) { + KilledMolecules++; + it_begin->SetTrackStatus(fStopAndKill); + } + else { + AcceptedMolecules++; + } + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void TimeStepAction::UserPostTimeStepAction() +{;} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void TimeStepAction::Clear() +{;} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void TimeStepAction::UserReactionAction(const G4Track& /*trackA*/, + const G4Track& /*trackB*/, + const std::vector<G4Track*>* /*products*/) +{;} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....