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