Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // MoleculeInserter.cc 28 // 29 // Authors: J. Naoki D. Kondo (UCSF, US) 30 // J. Ramos-Mendez and B. Faddegon (UCSF, US) 31 // 32 /// \file MoleculeInserter.cc 33 /// \brief Implementation of the DNA chemical species inserter for IRT 34 35 #include "MoleculeInserter.hh" 36 37 #include "G4ITTrackHolder.hh" 38 #include "G4MolecularConfiguration.hh" 39 #include "G4Molecule.hh" 40 #include "G4MoleculeTable.hh" 41 #include "G4PhysicalVolumeStore.hh" 42 #include "G4Track.hh" 43 #include "G4VPhysicalVolume.hh" 44 #include "Randomize.hh" 45 46 #include <cassert> 47 48 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 49 50 MoleculeInserter::MoleculeInserter() : fSaveTrackID(false) {} 51 52 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 53 54 MoleculeInserter::MoleculeInserter(G4bool save) : fSaveTrackID(save) {} 55 56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 57 58 void MoleculeShoot::Shoot(MoleculeInserter* gun) 59 { 60 for (int i = 0; i < fNumber; ++i) { 61 G4MolecularConfiguration* conf = G4MoleculeTable::Instance()->GetConfiguration(fMoleculeName); 62 63 if (conf == 0) { 64 G4String msg = "Chemistry Error: Molecule " + fMoleculeName + " don't exists."; 65 G4Exception("MoleculeInserter::Shoot()", "Invalid_Value", FatalException, msg); 66 } 67 68 G4Molecule* molecule = new G4Molecule(conf); 69 gun->PushToChemistry(molecule, fTime, fPosition); 70 } 71 } 72 73 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 74 75 void MoleculeInserter::CreateMolecule(G4Molecule* molecule, G4double time, G4ThreeVector pos) 76 { 77 G4Track* MolTrack = molecule->BuildTrack(time, pos); 78 PushTrack(MolTrack); 79 } 80 81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 82 83 void MoleculeInserter::CreateMolecule(G4String molecule, G4double time, G4ThreeVector pos) 84 { 85 G4MolecularConfiguration* conf = G4MoleculeTable::Instance()->GetConfiguration(molecule); 86 87 if (conf == 0) { 88 G4String msg = "Chemistry Error: Molecule " + molecule + " don't exists."; 89 G4Exception("MoleculeInserter::CreateMolecule()", "Invalid_Value", FatalException, msg); 90 } 91 92 G4Molecule* gmolecule = new G4Molecule(conf); 93 G4Track* MolTrack = gmolecule->BuildTrack(time, pos); 94 PushTrack(MolTrack); 95 } 96 97 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 98 99 void MoleculeInserter::PushToChemistry(G4Molecule* mol, G4double time, G4ThreeVector position) 100 { 101 G4Track* MolTrack = mol->BuildTrack(time, position); 102 PushTrack(MolTrack); 103 104 if (fSaveTrackID) { 105 fInsertedTracks.push_back(MolTrack); 106 } 107 } 108 109 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 110 111 void MoleculeInserter::DefineTracks() 112 { 113 if (fInsertedTracks.size() != 0) { 114 fInsertedTracks.clear(); 115 } 116 117 for (size_t i = 0; i < fShoots.size(); i++) { 118 fShoots[i].Shoot(this); 119 } 120 } 121 122 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 123 124 void MoleculeInserter::AddMolecule(const G4String& name, const G4ThreeVector& position, double time) 125 { 126 MoleculeShoot shoot; 127 shoot.fMoleculeName = name; 128 shoot.fPosition = position; 129 shoot.fTime = time; 130 fShoots.push_back(shoot); 131 } 132 133 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 134 135 MoleculeShoot::MoleculeShoot() 136 { 137 fMoleculeName = ""; 138 fTime = 0; 139 fNumber = 1; 140 } 141 142 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 143 144 void MoleculeInserter::Clean() 145 { 146 if (fShoots.size() != 0) fShoots.clear(); 147 148 if (fInsertedTracks.size() != 0) fInsertedTracks.clear(); 149 } 150 151 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 152