Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4DNAEventSet.hh
Go to the documentation of this file.
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#ifndef G4DNAEventSet_hh
28#define G4DNAEventSet_hh 1
29#include <list>
30#include <map>
31#include <G4memory.hh>
32#include <set>
33#include "G4DNAMesh.hh"
34#include <variant>
37class Event
38{
39 public:
42 using JumpingData = std::pair<MolType, Index>;
44
45 // to test C++17
46 // using Data = std::variant<std::unique_ptr<JumpingData>, ReactionData*>
47 using Data = std::pair<std::unique_ptr<JumpingData>, ReactionData*>;
48
49 Event(const G4double& time, const Index& index, ReactionData*);
50 Event(const G4double& time, const Index& index, std::unique_ptr<JumpingData>&&);
51
52 virtual ~Event();
53 inline G4double GetTime() const { return fTimeStep; }
54 inline Index GetIndex() const { return fIndex; }
55 void PrintEvent() const;
56 JumpingData* GetJumpingData() const { return std::get<0>(fData).get(); }
57 ReactionData* GetReactionData() const { return std::get<1>(fData); }
58
59 private:
60 G4double fTimeStep;
61 Index fIndex;
62 Data fData;
63};
64
66{
67 G4bool operator()(std::unique_ptr<Event> const& rhs,
68 std::unique_ptr<Event> const& lhs) const;
69};
70
72{
73 public:
74 IEventSet() = default;
75 ~IEventSet() = default;
76};
77
79{
80 public:
82 using EventSet = std::set<std::unique_ptr<Event>, comparatorEventSet>;
83 using EventMap = std::unordered_map<Index, EventSet::iterator,G4VDNAMesh::hashFunc>;
85 virtual ~G4DNAEventSet();
86
87 void CreateEvent(const G4double& time, const Index& index,
88 Event::ReactionData* pReactionData);
89 void CreateEvent(const G4double& time, const Index& index,
90 std::unique_ptr<Event::JumpingData> jum);
91
92 void AddEvent(std::unique_ptr<Event> pEvent);
94 {
95 fEventSet.clear();
96 fEventMap.clear();
97 }
98 void RemoveEventOfVoxel(const Index& key);
99
100 EventSet::iterator end() { return fEventSet.end(); }
101 EventSet::iterator begin() { return fEventSet.begin(); }
102
103 EventSet::reverse_iterator rend() { return fEventSet.rend(); }
104 EventSet::reverse_iterator rbegin() { return fEventSet.rbegin(); }
105 EventSet::const_iterator end() const { return fEventSet.end(); }
106 EventSet::const_iterator begin() const { return fEventSet.begin(); }
107 size_t size() { return fEventSet.size(); }
108 G4bool Empty() { return fEventSet.empty(); }
109 void RemoveEvent(EventSet::iterator iter);
110 void PrintEventSet();
111 private:
112 EventSet fEventSet;
113 EventMap fEventMap;
114};
115#endif
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
ReactionData * GetReactionData() const
G4double GetTime() const
std::pair< MolType, Index > JumpingData
void PrintEvent() const
G4VDNAMesh::Index Index
virtual ~Event()
JumpingData * GetJumpingData() const
Index GetIndex() const
std::pair< std::unique_ptr< JumpingData >, ReactionData * > Data
EventSet::reverse_iterator rend()
EventSet::reverse_iterator rbegin()
EventSet::iterator end()
virtual ~G4DNAEventSet()
void PrintEventSet()
EventSet::const_iterator begin() const
void RemoveEventOfVoxel(const Index &key)
G4VDNAMesh::Index Index
std::unordered_map< Index, EventSet::iterator, G4VDNAMesh::hashFunc > EventMap
void AddEvent(std::unique_ptr< Event > pEvent)
void RemoveEventSet()
void CreateEvent(const G4double &time, const Index &index, Event::ReactionData *pReactionData)
std::set< std::unique_ptr< Event >, comparatorEventSet > EventSet
EventSet::iterator begin()
void RemoveEvent(EventSet::iterator iter)
EventSet::const_iterator end() const
~IEventSet()=default
IEventSet()=default
G4bool operator()(std::unique_ptr< Event > const &rhs, std::unique_ptr< Event > const &lhs) const