00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "BDSGlobalConstants.hh"
00016 #include "G4Timer.hh"
00017
00018 #include "BDSRunManager.hh"
00019 #include "G4StateManager.hh"
00020 #include "G4UImanager.hh"
00021
00022
00023 BDSRunManager* BDSRunManager::fRunManager = 0;
00024
00025 BDSRunManager* BDSRunManager::GetRunManager()
00026 { return fRunManager; }
00027
00028 BDSRunManager::BDSRunManager(){ fRunManager = this;}
00029
00030 BDSRunManager::~BDSRunManager(){ G4cout << "BDSRunManager deleting..." << G4endl; }
00031
00032 void BDSRunManager::BeamOn(G4int n_event,const char* macroFile,G4int n_select)
00033 {
00034 G4bool cond = ConfirmBeamOnCondition();
00035 G4StackManager* SM;
00036 SM = G4EventManager::GetEventManager()->GetStackManager();
00037 if(cond)
00038 {
00039 numberOfEventToBeProcessed = n_event;
00040 RunInitialization();
00041 if(n_event>0) DoEventLoop(n_event,macroFile,n_select);
00042 RunTermination();
00043 while(!BDSGlobals->holdingQueue.empty()){
00044 BDSGlobals->setReadFromStack(true);
00045 SM->ClearPostponeStack();
00046
00047 RunInitialization();
00048
00049 DoEventLoop(BDSGlobals->holdingQueue.size(),macroFile,n_select);
00050 RunTermination();
00051
00052 BDSGlobals->setReadFromStack(false);
00053 }
00054 }
00055 }
00056
00057 void BDSRunManager::DoEventLoop(G4int n_event,const char* macroFile,G4int n_select)
00058 {
00059
00060
00061 if(verboseLevel>0)
00062 { timer->Start(); }
00063
00064 G4String msg;
00065 if(macroFile!=0)
00066 {
00067 if(n_select<0) n_select = n_event;
00068 msg = "/control/execute ";
00069 msg += macroFile;
00070 }
00071 else
00072 { n_select = -1; }
00073
00074 G4int i_event;
00075 for( i_event=0; i_event<n_event; i_event++ )
00076 {
00077
00078
00079
00080
00081 currentEvent = GenerateEvent(i_event);
00082
00083 if(currentEvent == NULL) G4cerr<<__FILE__<<" : "<<__LINE__<<"Event generation failed "<<G4endl;
00084
00085 eventManager->ProcessOneEvent(currentEvent);
00086
00087 AnalyzeEvent(currentEvent);
00088
00089 if(i_event<n_select) G4UImanager::GetUIpointer()->ApplyCommand(msg);
00090
00091
00092
00093
00094
00095
00096 StackPreviousEvent(currentEvent);
00097 currentEvent = 0;
00098 if(runAborted) break;
00099 }
00100
00101 if(verboseLevel>0)
00102 {
00103 timer->Stop();
00104 G4cout << "Run terminated." << G4endl;
00105 G4cout << "Run Summary" << G4endl;
00106 if(runAborted)
00107 { G4cout << " Run Aborted after " << i_event << " events processed." << G4endl; }
00108 else
00109 { G4cout << " Number of events processed : " << n_event << G4endl; }
00110 G4cout << " " << *timer << G4endl;
00111 }
00112 }
00113
00114