139{
140 std::vector<std::unique_ptr<G4ITReactionChange>> fReactionInfo;
141 fReactionInfo.clear();
142
143 if (pReactionSet == nullptr)
144 {
145 return fReactionInfo;
146 }
147
149 for (auto tracks_i = reactionPerTrackMap.cbegin();
150 tracks_i != reactionPerTrackMap.cend();
151 tracks_i = reactionPerTrackMap.cbegin())
152 {
153 G4Track* pTrackA = tracks_i->first;
155 {
156 continue;
157 }
158
161
162 assert(reactionList.cbegin() != reactionList.cend());
163
164 for (auto it = reactionList.cbegin(); it != reactionList.cend(); it = reactionList.cbegin())
165 {
167 G4Track* pTrackB =
reaction->GetReactant(pTrackA);
169 {
170 continue;
171 }
172
173 if (pTrackB == pTrackA)
174 {
176 exceptionDescription
177 << "The IT reaction process sent back a reaction between trackA and trackB. ";
178 exceptionDescription << "The problem is trackA == trackB";
180 "ITModelProcessor005",
182 exceptionDescription);
183 }
184
186
187 if (
TestReactibility(*pTrackA, *pTrackB, currentStepTime, reachedUserStepTimeLimit))
188 {
189 auto pReactionChange =
MakeReaction(*pTrackA, *pTrackB);
190
191 if (pReactionChange)
192 {
193 fReactionInfo.push_back(std::move(pReactionChange));
194 break;
195 }
196 }
197 }
198 }
199
201 return fReactionInfo;
202}
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
std::map< G4Track *, G4ITReactionPerTrackPtr, compTrackPerID > G4ITReactionPerTrackMap
G4shared_ptr< G4ITReaction > G4ITReactionPtr
std::list< G4ITReactionPtr > G4ITReactionList
G4shared_ptr< G4ITReactionPerTrack > G4ITReactionPerTrackPtr
std::unique_ptr< G4ITReactionChange > MakeReaction(const G4Track &, const G4Track &) override
G4bool TestReactibility(const G4Track &, const G4Track &, double currentStepTime, bool userStepTimeLimit) override
void SelectThisReaction(G4ITReactionPtr reaction)
G4ITReactionPerTrackMap & GetReactionMap()
G4TrackStatus GetTrackStatus() const