33 #ifndef G4ITREACTIONINFO_HH_ 34 #define G4ITREACTIONINFO_HH_ 45 #ifndef compTrackPerID__ 46 #define compTrackPerID__ 51 return rhs->GetTrackID() < lhs->GetTrackID();
64 typedef std::map<G4Track*,
91 if(fReactants.first != trackA)
return fReactants.first;
92 return fReactants.second;
95 std::pair<G4Track*, G4Track*>
GetReactants()
const{
return fReactants;}
96 std::size_t GetHash()
const;
102 G4ITReactionList::iterator it)
104 fReactionPerTrack.push_back(std::make_pair(reactionPerTrack, it));
136 G4ITReactionList::iterator it =
137 fReactions.insert(fReactions.end(), reaction);
138 reaction->AddIterator(this->shared_from_this(), it);
143 fReactionSetIt.push_back(it);
146 bool RemoveThisReaction(G4ITReactionList::iterator it);
151 G4ITReactionList::iterator next;
152 for(G4ITReactionList::iterator it = fReactions.begin() ;
153 it != fReactions.end() ; it = next)
160 fReactionSetIt.clear();
170 return fReactionSetIt;
188 fReactionPerTrack.clear();
189 fReactionPerTime.clear();
204 AddReaction(trackA, reaction);
205 AddReaction(trackB, reaction);
209 G4ITReactionPerTime::iterator it = fReactionPerTime.insert(reaction);
210 reaction->AddIterator(it);
216 std::vector<G4Track*>::iterator it = reactants->begin();
217 for(;it != reactants->end() ; ++it)
219 AddReaction(time, trackA, *it);
225 G4ITReactionPerTrackMap::iterator it = fReactionPerTrack.find(track);
226 if(it != fReactionPerTrack.end())
229 backItUp->RemoveMe();
231 it = fReactionPerTrack.find(track);
232 if(it != fReactionPerTrack.end())
234 fReactionPerTrack.erase(it);
241 reaction->RemoveMe();
242 RemoveReactionSet(reaction->GetReactants().first);
243 RemoveReactionSet(reaction->GetReactants().second);
248 return fReactionPerTrack;
253 for(std::list<G4ITReactionPerTrackMap::iterator>::iterator it =
254 reactionPerTrack->GetListOfIterators().begin() ;
255 it != reactionPerTrack->GetListOfIterators().end() ;
258 fReactionPerTrack.erase(*it);
260 reactionPerTrack->GetListOfIterators().clear();
261 reactionPerTrack->GetReactionList().clear();
266 for(G4ITReactionPerTrackMap::iterator it = fReactionPerTrack.begin();
267 it != fReactionPerTrack.end() ;
268 it = fReactionPerTrack.begin())
270 it->second->RemoveMe();
272 fReactionPerTrack.clear();
273 fReactionPerTime.clear();
278 return fReactionPerTrack.empty();
283 return fReactionPerTime;
289 G4ITReactionPerTrackMap::iterator it = fReactionPerTrack.find(track);
293 if(it == fReactionPerTrack.end())
296 std::pair< G4ITReactionPerTrackMap::iterator,bool>
pos =
297 fReactionPerTrack.insert(std::make_pair(track, reactionPerTrack));
298 reactionPerTrack->AddIterator(pos.first);
302 reactionPerTrack = it->second;
305 reactionPerTrack->AddReaction(reaction);
G4ITReactionPerTrackMap fReactionPerTrack
std::pair< G4Track *, G4Track * > GetReactants() const
virtual ~G4ITReactionSet()
#define G4enable_shared_from_this
bool operator()(G4Track *rhs, G4Track *lhs) const
G4ITReactionList & GetReactionList()
std::list< G4ITReactionPerTrackMap::iterator > fReactionSetIt
void RemoveReactionSet(G4Track *track)
void AddReaction(G4Track *track, G4ITReactionPtr reaction)
G4shared_ptr< std::vector< G4Track * > > G4TrackVectorHandle
std::multiset< G4ITReactionPtr, compReactionPerTime > G4ITReactionPerTime
void AddReactions(double time, G4Track *trackA, G4TrackVectorHandle reactants)
G4shared_ptr< G4ITReaction > G4ITReactionPtr
static G4ITReactionPerTrackPtr New()
void AddReaction(double time, G4Track *trackA, G4Track *trackB)
std::map< G4Track *, G4ITReactionPerTrackPtr, compTrackPerID > G4ITReactionPerTrackMap
G4ITReactionPerTrackMap & GetReactionMap()
static G4ITReactionSet * Instance()
void SelectThisReaction(G4ITReactionPtr reaction)
void AddReaction(G4ITReactionPtr reaction)
std::list< G4ITReactionPerTrackMap::iterator > & GetListOfIterators()
std::list< G4ITReactionPtr > G4ITReactionList
void AddIterator(G4ITReactionPerTimeIt it)
G4ITReactionPerTime & GetReactionsPerTime()
G4ITReactionPerTime fReactionPerTime
G4Track * GetReactant(G4Track *trackA)
void RemoveReactionPerTrack(G4ITReactionPerTrackPtr reactionPerTrack)
static G4ThreadLocal G4ITReactionSet * fpInstance
static G4ITReactionPtr New(double time, G4Track *trackA, G4Track *trackB)
G4shared_ptr< G4ITReactionPerTrack > G4ITReactionPerTrackPtr
std::pair< G4Track *, G4Track * > fReactants
G4ITReactionList fReactions
void AddIterator(G4ITReactionPerTrackPtr reactionPerTrack, G4ITReactionList::iterator it)
void AddIterator(G4ITReactionPerTrackMap::iterator it)
std::list< std::pair< G4ITReactionPerTrackPtr, G4ITReactionList::iterator > > G4ReactionPerTrackIt
G4ITReactionPerTimeIt * fReactionPerTimeIt
G4ReactionPerTrackIt fReactionPerTrack
std::multiset< G4ITReactionPtr, compReactionPerTime >::iterator G4ITReactionPerTimeIt
static const G4double pos
virtual ~G4ITReactionPerTrack()