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 /// file: ChromosomeMapper.cc 28 /// brief: Implementation of class to track chromosomes 29 #include "ChromosomeMapper.hh" 30 31 #include "ChromosomeMessenger.hh" 32 #include "DNAHashing.hh" 33 #include "VirtualChromosome.hh" 34 35 #include <fstream> 36 #include <sstream> 37 38 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 39 40 ChromosomeMapper::ChromosomeMapper() : fChromosomes({}) 41 { 42 fpChromosomeMessenger = new ChromosomeMessenger(this); 43 fpChromosomeFactory = new ChromosomeFactory(); 44 } 45 46 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 47 48 ChromosomeMapper::~ChromosomeMapper() 49 { 50 delete fpChromosomeMessenger; 51 delete fpChromosomeFactory; 52 } 53 54 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 55 56 [[maybe_unused]] G4String ChromosomeMapper::GetCurrentChromosomeKey(const G4ThreeVector& pos) const 57 { 58 G4String key = ""; 59 for (const auto& Chromosome : fChromosomes) { 60 if (Chromosome.second->PointInChromosome(pos)) { 61 // key = Chromosome.first; 62 key = Chromosome.second->GetName(); 63 break; 64 } 65 } 66 return key; 67 } 68 69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 70 71 [[maybe_unused]] VirtualChromosome* ChromosomeMapper::GetChromosome(const G4ThreeVector& pos) const 72 { 73 for (const auto& fChromosome : fChromosomes) { 74 if (fChromosome.second->PointInChromosome(pos)) { 75 return fChromosome.second; 76 } 77 } 78 return nullptr; 79 } 80 81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 82 83 [[maybe_unused]] VirtualChromosome* ChromosomeMapper::GetChromosome(const G4String& key) const 84 { 85 uint32_t key_i = G4::hashing::crc32::Hash(key); 86 87 try { 88 return fChromosomes.at(key_i); 89 } 90 catch (const std::out_of_range& oor) { 91 G4cout << "Chromosome does not exist with key: " << key << G4endl; 92 return nullptr; 93 } 94 } 95 96 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 97 98 void ChromosomeMapper::AddChromosome(const G4String& key, const std::vector<G4String>& commands) 99 { 100 uint32_t key_i = G4::hashing::crc32::Hash(key); 101 102 auto it = fChromosomes.find(key_i); 103 104 if (it == fChromosomes.end()) { 105 auto* newChromosome = ChromosomeFactory::MakeChromosome(key, commands); 106 fChromosomes.emplace(key_i, newChromosome); 107 } 108 else { 109 G4ExceptionDescription errmsg; 110 errmsg << "ChromosomeMapper:: " 111 << "Chromosome already exists with key: " << key << G4endl; 112 G4Exception("ChromosomeMapper::AddChromosome", "", FatalException, errmsg); 113 } 114 } 115 116 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 117 118 void ChromosomeMapper::SavePlotData(const G4String& filename) 119 { 120 std::fstream fs(filename, std::fstream::in | std::fstream::out | std::fstream::trunc); 121 for (auto& fChromosome : fChromosomes) { 122 fs << fChromosome.second->Plot(); 123 } 124 fs.close(); 125 } 126 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 127 128 [[maybe_unused]] std::vector<G4String> ChromosomeMapper::GetChromosomeKeys() const 129 { 130 std::vector<G4String> keys; 131 for (const auto& fChromosome : fChromosomes) { 132 keys.push_back(fChromosome.second->GetName()); 133 } 134 return keys; 135 } 136 137 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 138 139 void ChromosomeMapper::Test() 140 { 141 fpChromosomeFactory->Test(); 142 } 143