File indexing completed on 2026-09-11 08:30:27
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 #ifndef CHEM4_ScoreSpecies_h
0038 #define CHEM4_ScoreSpecies_h 1
0039
0040 #include "G4THitsMap.hh"
0041 #include "G4VPrimitiveScorer.hh"
0042
0043 #include <set>
0044
0045 class G4VAnalysisManager;
0046 class G4MolecularConfiguration;
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059 class ScoreSpecies : public G4VPrimitiveScorer
0060 {
0061 public:
0062 ScoreSpecies(G4String name, G4int depth = 0);
0063
0064 virtual ~ScoreSpecies();
0065
0066
0067
0068 inline void AddTimeToRecord(double time) { fTimeToRecord.insert(time); }
0069
0070
0071 inline void ClearTimeToRecord() { fTimeToRecord.clear(); }
0072
0073
0074 inline int GetNumberOfRecordedEvents() const { return fNEvent; }
0075
0076
0077 void ASCII();
0078
0079
0080 void WriteWithAnalysisManager(G4VAnalysisManager*);
0081
0082 struct SpeciesInfo
0083 {
0084 SpeciesInfo()
0085 {
0086 fNumber = 0;
0087 fG = 0.;
0088 fG2 = 0.;
0089 }
0090 SpeciesInfo(const SpeciesInfo& right)
0091 {
0092 fNumber = right.fNumber;
0093 fG = right.fG;
0094 fG2 = right.fG2;
0095 }
0096 SpeciesInfo& operator=(const SpeciesInfo& right)
0097 {
0098 if (&right == this) return *this;
0099 fNumber = right.fNumber;
0100 fG = right.fG;
0101 fG2 = right.fG2;
0102 return *this;
0103 }
0104 int fNumber;
0105 double fG;
0106 double fG2;
0107 };
0108
0109 #ifdef _ScoreSpecies_FOR_ALL_EVENTS
0110 struct SpeciesInfoSOA
0111 {
0112 SpeciesInfoSOA()
0113 {
0114
0115
0116
0117 }
0118 SpeciesInfoSOA(const SpeciesInfoSOA& right)
0119 {
0120 fNumber = right.fNumber;
0121 fG = right.fG;
0122 fG2 = right.fG2;
0123 fEventID = right.fEventID;
0124 }
0125 SpeciesInfoSOA& operator=(const SpeciesInfoSOA& right)
0126 {
0127 if (&right == this) return *this;
0128 fNumber = right.fNumber;
0129 fG = right.fG;
0130 fG2 = right.fG2;
0131 fEventID = right.fEventID;
0132 return *this;
0133 }
0134 std::vector<int> fNumber;
0135 std::vector<double> fG;
0136 std::vector<double> fG2;
0137 std::vector<int> fEventID;
0138 };
0139 #endif
0140
0141 private:
0142 typedef const G4MolecularConfiguration Species;
0143 typedef std::map<Species*, SpeciesInfo> InnerSpeciesMap;
0144 typedef std::map<double, InnerSpeciesMap> SpeciesMap;
0145 SpeciesMap fSpeciesInfoPerTime;
0146
0147 #ifdef _ScoreSpecies_FOR_ALL_EVENTS
0148 typedef std::map<Species, SpeciesInfoSOA> InnerSpeciesMapPerEvent;
0149 typedef std::map<double, InnerSpeciesMapPerEvent> SpeciesMapPerEvent;
0150 SpeciesMapPerEvent fSpeciesInfoPerEvent;
0151 #endif
0152
0153 std::set<G4double> fTimeToRecord;
0154
0155 int fNEvent;
0156 double fEdep;
0157 G4String fOutputType;
0158
0159 protected:
0160 virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*);
0161
0162 public:
0163 virtual void Initialize(G4HCofThisEvent*);
0164 virtual void EndOfEvent(G4HCofThisEvent*);
0165 virtual void DrawAll();
0166 virtual void PrintAll();
0167
0168
0169 virtual void AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer*);
0170 virtual void OutputAndClear();
0171
0172 SpeciesMap GetSpeciesInfo() { return fSpeciesInfoPerTime; }
0173
0174 private:
0175 G4int fHCID;
0176 G4THitsMap<G4double>* fEvtMap;
0177 };
0178 #endif