45 G4TrackList::Watcher(), fpMainList(0), fpWaitingList(0)
50 G4TrackList::Watcher(), fpMainList(0), fpWaitingList(0)
57 fpMainList(right.fpMainList),
58 fpWaitingList(right.fpWaitingList)
78 if (__list == fpMainList)
83 else if (__list == fpWaitingList)
94 allMainList.
Add(__list);
136 listOfAllSecondaries.
Add(&fSecondaries);
143 if (fpWaitingList == 0)
157 if (fpMainList == 0) fpMainList =
new G4TrackList();
163 if (fpMainList == 0) fpMainList =
new G4TrackList();
173 nTracks += fpMainList->
size();
178 nTracks += fpWaitingList->
size();
181 nTracks += fSecondaries.
size();
205 fgMasterInstance = fgInstance;
215 if (fgMasterInstance == 0)
220 return fgMasterInstance;
236 std::map<Key, PriorityList*>::iterator end =
fLists.end();
238 for (std::map<Key, PriorityList*>::iterator it =
fLists.begin(); it != end;
247 MapOfDelayedLists::iterator fDelayedList_i =
fDelayedList.begin();
248 MapOfDelayedLists::iterator fDelayedList_end =
fDelayedList.end();
250 for (; fDelayedList_i != fDelayedList_end; fDelayedList_i++)
252 std::map<Key, G4TrackList*>::iterator it = fDelayedList_i->second.begin();
253 std::map<Key, G4TrackList*>::iterator __end =
254 fDelayedList_i->second.end();
256 for (; it != __end; it++)
258 if (it->second)
delete (it->second);
299 std::map<Key, G4TrackList*>::iterator it =
301 std::map<Key, G4TrackList*>::iterator end =
303 if (it == end)
return false;
306 for (; it != end; it++)
310 std::map<Key, PriorityList*>::iterator it_listUnion =
fLists.find(
312 if (it_listUnion ==
fLists.end())
318 if (it_listUnion->second == 0)
322 right_listUnion = it_listUnion->second;
325 if (it->second == 0)
continue;
361 std::map<Key, PriorityList*>::iterator it =
fLists.begin();
362 std::map<Key, PriorityList*>::iterator end =
fLists.end();
364 for (; it != end; it++)
366 if (it->second->GetMainList() == 0)
371 it->second->TransferSecondariesToMainList();
405 std::map<Key, PriorityList*>::iterator it =
fLists.find(moleculeID);
412 fLists[moleculeID] = priorityList;
416 priorityList = it->second;
453 <<
"You are trying to push a non-existing track (track pointer is null)"
456 G4Exception(
"G4ITTrackHolder::_PushTrack",
"ITStepManager014",
474 G4cout <<
"\t"<<
">> Pushing a track --> ";
486 if (globalTime < currentGlobalTime)
490 <<
"You are trying to push a track with a global time"
491 <<
" inferior to the current simulation time." <<
G4endl<<
"The time is going back : " <<
G4endl
492 <<
"The time in the step manager : "
495 <<
"The time of the track : "
498 <<
"(ITStepManager is not yet running)"
501 G4Exception(
"G4ITTrackHolder::_PushTrack",
"ITStepManager014",
515 if (globalTime == currentGlobalTime)
521 G4cout <<
"\t"<<
">> Pushing to *main* list --> ";
539 G4cout <<
"\t"<<
">> Pushing to *delayed* list --> ";
554 double timeDifference = globalTime - currentGlobalTime;
557 if (timeDifference < -1 * timeTolerance)
561 <<
"You are trying to push a track with a global time"
562 <<
" inferior to the current simulation time." <<
G4endl<<
"The time is going back : "
564 <<
"The time in the step manager : "
567 <<
"The time of the track : " <<
G4BestUnit(globalTime,
"Time")
569 <<
"(ITStepManager is running)"
572 G4Exception(
"G4ITTrackHolder::_PushTrack",
"ITStepManager015",
580 if (fabs(timeDifference) < timeTolerance)
588 G4cout <<
"\t"<<
">> Pushing to *secondary* list --> ";
603 <<
"While running you cannot push a track"
604 <<
" with a bigger global time than the current global time" <<
G4endl<<
"The time in the step manager : "
607 <<
"The time of the track : " <<
G4BestUnit(globalTime,
"Time")
609 <<
"(ITStepManager is running)"
612 G4Exception(
"G4ITTrackHolder::_PushTrack",
"ITStepManager016",
626 G4cout <<
"\t" <<
">> Pushing a delayed track" <<
G4endl;
635 std::map<double, std::map<Key, G4TrackList*> >::iterator it_delayed =
645 std::map<Key, G4TrackList*>::iterator it_trackList =
646 it_delayed->second.find(moleculeID);
648 if (it_trackList == it_delayed->second.end())
650 (it_delayed->second[moleculeID] =
new G4TrackList())->push_back(track);
654 if (it_trackList->second != 0)
656 it_trackList->second->push_back(track);
702 G4cout <<
"*** G4ITTrackHolder::KillTracks , step #"
706 G4cout << setw(25) << left <<
"#Name"
707 << setw(25) <<
"track ID"<<
G4endl;
733 std::map<Key, PriorityList*>::iterator it =
fLists.begin();
735 for (; it !=
fLists.end(); it++)
737 if (it->second)
delete it->second;
746 std::map<Key, G4TrackList*>::iterator it2 = it1->second.begin();
748 for (; it2 != it1->second.end(); it2++)
750 if (it2->second)
delete it2->second;
768 std::map<Key, PriorityList*>::iterator it =
fLists.find(i);
769 if (it ==
fLists.end())
return 0;
784 G4TrackList::Watcher* watcher,
787 std::map<Key, PriorityList*>::iterator it =
fLists.find(
id);
788 if (it ==
fLists.end())
return false;
791 if (trackList == 0)
return false;
823 MapOfDelayedLists::iterator delayedmap_it =
fDelayedList.begin();
824 MapOfDelayedLists::iterator delayedmap_end =
fDelayedList.end();
826 for (; delayedmap_it != delayedmap_end; delayedmap_it++)
828 std::map<Key, G4TrackList*>::iterator it = delayedmap_it->second.begin();
829 std::map<Key, G4TrackList*>::iterator end = delayedmap_it->second.end();
831 for (; it != end; it++)
833 if (it->second) nTracks += it->second->size();
844 MapOfPriorityLists::iterator it =
fLists.begin();
845 MapOfPriorityLists::iterator end =
fLists.end();
846 for (; it != end; it++)
850 lists->SetWaitingList(lists->GetMainList());
859 MapOfDelayedLists::iterator __it =
fDelayedList.begin();
861 for (; __it != __end; __it++)
863 std::map<Key, G4TrackList*>& mapOfLists = __it->second;
864 if (mapOfLists.empty() ==
false)
866 std::map<Key, G4TrackList*>::iterator it = mapOfLists.begin();
867 std::map<Key, G4TrackList*>::iterator end = mapOfLists.end();
868 for (; it != end; it++)
872 if (!(mainList->empty()))
return true;
883 MapOfPriorityLists::iterator it = mapOfLists.begin();
884 MapOfPriorityLists::iterator end = mapOfLists.end();
885 for (; it != end; it++)
891 if (!(trackList->empty()))
return true;
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4Mutex pushToTheMasterInstance
G4Mutex creationOfTheMasterInstance
G4IT * GetIT(const G4Track *track)
G4FastList< G4Track > G4TrackList
G4GLOB_DLL std::ostream G4cout
void transferTo(G4FastList< OBJECT > *)
G4FastListNode< G4FastList< OBJECT > > * GetListNode()
void AddWatcher(Watcher *watcher)
void push_back(OBJECT *__track)
static G4ITTrackHolder * MasterInstance()
std::map< Key, PriorityList * > MapOfPriorityLists
G4TrackManyList fAllMainList
void _PushTrack(G4Track *track)
MapOfDelayedLists fDelayedList
bool fMainListHaveBeenSet
virtual size_t GetNTracks()
G4TrackManyList * GetMainList()
void PushTo(G4Track *, PriorityList::Type)
G4TrackList fToBeKilledList
PriorityList * GetPriorityList(Key)
bool CheckMapIsNOTEmpty(MapOfPriorityLists &mapOfLists, PriorityList::Type type)
void AddTrackID(G4Track *track)
virtual void Push(G4Track *)
void MergeSecondariesWithMainList()
std::map< Key, PriorityList * > fLists
void AddWatcherForKillList(G4TrackList::Watcher *)
G4TrackManyList fAllSecondariesList
virtual ~G4ITTrackHolder()
static G4ITTrackHolder * Instance()
bool MergeNextTimeToMainList(double &time)
void PushDelayed(G4Track *track)
bool AddWatcher(int, G4TrackList::Watcher *, PriorityList::Type=PriorityList::MainList)
double fPostActivityGlobalTime
static void PushToMaster(G4Track *)
void AddWatcherForMainList(G4TrackList::Watcher *)
void MoveMainToWaitingList()
bool DelayListsNOTEmpty()
virtual G4ITType GetITSubType() const
virtual const G4String & GetName() const =0
void AddGlobalWatcher(typename G4FastList< OBJECT >::Watcher *watcher)
void Add(G4FastList< OBJECT > *__list)
static G4Scheduler * Instance()
G4double GetGlobalTime() const
G4double GetTimeTolerance() const
G4double GetGlobalTime() const
void SetTrackID(const G4int aValue)
static G4VScheduler * Instance()
virtual G4int GetNbSteps() const
void TransferSecondariesToMainList()
void MergeWithMainList(G4TrackList *trackList)
void NewMainList(G4TrackList *__list, G4TrackManyList &allMainList)
G4TrackList * GetMainList()
void PushToListOfSecondaries(G4Track *__track, G4TrackManyList &listOfAllSecondaries)
void TransferToMainList(G4TrackList *&__list, G4TrackManyList &allMainList)
virtual void NotifyDeletingList(G4TrackList *__list)
void PushToMainList(G4Track *__track, G4TrackManyList &allMainList)
void PushToWaitingList(G4Track *__track)
G4bool IsMultithreadedApplication()