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 // This example is provided by the Geant4-DNA collaboration 27 // Any report or published results obtained using the Geant4-DNA software 28 // shall cite the following Geant4-DNA collaboration publication: 29 // Med. Phys. 37 (2010) 4692-4708 30 // J. Comput. Phys. 274 (2014) 841-882 31 // The Geant4-DNA web site is available at http://geant4-dna.org 32 // 33 // 34 #ifndef CHEM4_ScoreSpecies_h 35 #define CHEM4_ScoreSpecies_h 1 36 37 #include "G4THitsMap.hh" 38 #include "G4VPrimitiveScorer.hh" 39 40 #include <set> 41 42 class G4VAnalysisManager; 43 class G4MolecularConfiguration; 44 45 // #define _ScoreSpecies_FOR_ALL_EVENTS 46 47 /** \file ScoreSpecies.hh*/ 48 49 // Description: 50 // This is a primitive scorer class for scoring the radiolitic species 51 // produced after irradiation in a water volume 52 // 53 // Created: 2015-10-27 by M. Karamitros, 54 // modified: 2016-03-16 by P. Piersimoni 55 56 class ScoreSpecies : public G4VPrimitiveScorer 57 { 58 public: 59 ScoreSpecies(G4String name, G4int depth = 0); 60 61 virtual ~ScoreSpecies(); 62 63 /** Add a time at which the number of species should be recorded. 64 Default times are set up to 1 microsecond.*/ 65 inline void AddTimeToRecord(double time) { fTimeToRecord.insert(time); } 66 67 /** Remove all times to record, must be reset by user.*/ 68 inline void ClearTimeToRecord() { fTimeToRecord.clear(); } 69 70 /** Get number of recorded events*/ 71 inline int GetNumberOfRecordedEvents() const { return fNEvent; } 72 73 /** Write results to an text file*/ 74 void ASCII(); 75 76 /** Write results to whatever chosen file format*/ 77 void WriteWithAnalysisManager(G4VAnalysisManager*); 78 79 struct SpeciesInfo 80 { 81 SpeciesInfo() 82 { 83 fNumber = 0; 84 fG = 0.; 85 fG2 = 0.; 86 } 87 SpeciesInfo(const SpeciesInfo& right) // Species A(B); 88 { 89 fNumber = right.fNumber; 90 fG = right.fG; 91 fG2 = right.fG2; 92 } 93 SpeciesInfo& operator=(const SpeciesInfo& right) // A = B 94 { 95 if (&right == this) return *this; 96 fNumber = right.fNumber; 97 fG = right.fG; 98 fG2 = right.fG2; 99 return *this; 100 } 101 int fNumber; 102 double fG; 103 double fG2; 104 }; 105 106 #ifdef _ScoreSpecies_FOR_ALL_EVENTS 107 struct SpeciesInfoSOA 108 { 109 SpeciesInfoSOA() 110 { 111 // fNumber = 0; 112 // fG = 0.; 113 // fG2 = 0.; 114 } 115 SpeciesInfoSOA(const SpeciesInfoSOA& right) // Species A(B); 116 { 117 fNumber = right.fNumber; 118 fG = right.fG; 119 fG2 = right.fG2; 120 fEventID = right.fEventID; 121 } 122 SpeciesInfoSOA& operator=(const SpeciesInfoSOA& right) // A = B 123 { 124 if (&right == this) return *this; 125 fNumber = right.fNumber; 126 fG = right.fG; 127 fG2 = right.fG2; 128 fEventID = right.fEventID; 129 return *this; 130 } 131 std::vector<int> fNumber; 132 std::vector<double> fG; 133 std::vector<double> fG2; 134 std::vector<int> fEventID; 135 }; 136 #endif 137 138 private: 139 typedef const G4MolecularConfiguration Species; 140 typedef std::map<Species*, SpeciesInfo> InnerSpeciesMap; 141 typedef std::map<double, InnerSpeciesMap> SpeciesMap; 142 SpeciesMap fSpeciesInfoPerTime; 143 144 #ifdef _ScoreSpecies_FOR_ALL_EVENTS 145 typedef std::map<Species, SpeciesInfoSOA> InnerSpeciesMapPerEvent; 146 typedef std::map<double, InnerSpeciesMapPerEvent> SpeciesMapPerEvent; 147 SpeciesMapPerEvent fSpeciesInfoPerEvent; 148 #endif 149 150 std::set<G4double> fTimeToRecord; 151 152 int fNEvent; // number of processed events 153 double fEdep; // total energy deposition 154 G4String fOutputType; // output type 155 156 protected: 157 virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); 158 159 public: 160 virtual void Initialize(G4HCofThisEvent*); 161 virtual void EndOfEvent(G4HCofThisEvent*); 162 virtual void DrawAll(); 163 virtual void PrintAll(); 164 /** Method used in multithreading mode in order to merge 165 the results*/ 166 virtual void AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer*); 167 virtual void OutputAndClear(); 168 169 SpeciesMap GetSpeciesInfo() { return fSpeciesInfoPerTime; } 170 171 private: 172 G4int fHCID; 173 G4THitsMap<G4double>* fEvtMap; 174 }; 175 #endif 176