File indexing completed on 2025-02-23 09:21:53
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050 #ifndef DNADAMAGE2_ScoreSpecies_h
0051 #define DNADAMAGE2_ScoreSpecies_h 1
0052
0053 #include "G4THitsMap.hh"
0054 #include "G4UIcmdWithADoubleAndUnit.hh"
0055 #include "G4UIcmdWithAString.hh"
0056 #include "G4UIcmdWithAnInteger.hh"
0057 #include "G4UImessenger.hh"
0058 #include "G4VPrimitiveScorer.hh"
0059
0060 #include <set>
0061
0062 class G4VAnalysisManager;
0063 class G4MolecularConfiguration;
0064
0065
0066
0067 class ScoreSpecies : public G4VPrimitiveScorer, public G4UImessenger
0068 {
0069 public:
0070 ScoreSpecies(G4String name, G4int depth = 0);
0071 ~ScoreSpecies() override;
0072
0073
0074
0075 inline void AddTimeToRecord(double time) { fTimeToRecord.insert(time); }
0076
0077
0078 inline void ClearTimeToRecord() { fTimeToRecord.clear(); }
0079
0080
0081 inline int GetNumberOfRecordedEvents() const { return fNEvent; }
0082
0083
0084 void WriteWithAnalysisManager(G4VAnalysisManager*);
0085
0086 struct SpeciesInfo
0087 {
0088 SpeciesInfo() {}
0089 SpeciesInfo(const SpeciesInfo& right)
0090 {
0091 fNumber = right.fNumber;
0092 fNumber2 = right.fNumber2;
0093 fG = right.fG;
0094 fG2 = right.fG2;
0095 }
0096 SpeciesInfo& operator=(const SpeciesInfo& right)
0097 {
0098 if (&right == this) return *this;
0099 fNumber2 = right.fNumber2;
0100 fNumber = right.fNumber;
0101 fG = right.fG;
0102 fG2 = right.fG2;
0103 return *this;
0104 }
0105 int fNumber = 0;
0106 int fNumber2 = 0;
0107 double fG = 0;
0108 double fG2 = 0;
0109 };
0110
0111 private:
0112 typedef const G4MolecularConfiguration Species;
0113 typedef std::map<Species*, SpeciesInfo> InnerSpeciesMap;
0114 typedef std::map<double, InnerSpeciesMap> SpeciesMap;
0115 SpeciesMap fSpeciesInfoPerTime;
0116
0117 std::set<G4double> fTimeToRecord;
0118
0119 int fNEvent = 0;
0120 double fEdep = 0;
0121 G4String fOutputType;
0122
0123 protected:
0124 G4bool ProcessHits(G4Step*, G4TouchableHistory*) override;
0125
0126 public:
0127 void Initialize(G4HCofThisEvent*) override;
0128 void EndOfEvent(G4HCofThisEvent*) override;
0129 void DrawAll() override;
0130 void PrintAll() override;
0131
0132
0133 void AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer*);
0134 void OutputAndClear();
0135 void SetNewValue(G4UIcommand*, G4String) override;
0136 void OutputToASCII();
0137
0138 SpeciesMap GetSpeciesInfo() { return fSpeciesInfoPerTime; }
0139
0140 private:
0141 G4int fHCID;
0142 G4THitsMap<G4double>* fEvtMap = nullptr;
0143
0144 G4int fRunID = 0;
0145 G4UIdirectory* fSpeciesdir = nullptr;
0146 G4UIcmdWithAnInteger* fTimeBincmd = nullptr;
0147 G4UIcmdWithADoubleAndUnit* fAddTimeToRecordcmd = nullptr;
0148
0149 G4UIcmdWithAString* fOutputTypeUI = nullptr;
0150 G4UIcmdWithAString* fOutputFileUI = nullptr;
0151
0152 G4String fOutputFile = "Species_Info";
0153 };
0154
0155
0156
0157 #endif