Hi John,
I hope your respite was helpful to you. I believe that the issue may be in G4VisManager::EndOfRun(). The current version of G4VisManager::EndOfRun() is a lot more complex than the previous versions, and I keep getting twisted.
As per MT mode, this is what I mean, in my main.cc:
#ifdef G4MULTITHREADED
G4cout << “MT run manager” << G4endl;
G4MTRunManager * runManager = new G4MTRunManager;
//runManager->SetNumberOfThreads(1);
#else
G4cout << “NonMT run manager” << G4endl;
G4RunManager * runManager = new G4RunManager;
where the output is “NonMT run manager”.
I tried using the ‘kept events’ approach, and amazingly, it does the same thing. Here is my eventAction and runAction user class files:
myEventAction.cc ******************************
void myEventAction::EndOfEventAction(const G4Event* evt)
{
// get number of stored trajectories
//
G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer();
G4int i, n_trajectories = 0;
if (trajectoryContainer) n_trajectories = trajectoryContainer->entries();
G4String particleName;
G4EventManager* eventManager = G4EventManager::GetEventManager();
G4int event_id = = evt->GetEventID();
if(event_id<100 || event_id%100 == 0) G4cout << "End event number: " << event_id << G4endl;
if(event_id<2){
// Testing
eventManager->KeepTheCurrentEvent();
G4cout << "Keeping event " << event_id << G4endl;
}
return; // testing
// extract the trajectories and draw them
//
if (G4VVisManager::GetConcreteInstance()){
for (i=0; i<n_trajectories; i++)
{ G4Trajectory* trj = (G4Trajectory*)
((*(evt->GetTrajectoryContainer()))[i]);
particleName = trj->GetParticleName();
if(event_id<2){ //particleName==“gamma”){
eventManager->KeepTheCurrentEvent();
G4cout << “Drawing or Keeping event " << event_id << G4endl;
return; // this is only for testing; remove the return for below
trj->DrawTrajectory();
}
}
// Declare end of visualization
//G4UImanager::GetUIpointer()->ApplyCommand(”/vis/viewer/update");
}
}
myRunAction.cc ******************************
void myRunAction::EndOfRunAction(const G4Run* aRun)
{
G4int run_id = aRun->GetRunID();
G4cout << “### Run " << run_id << " end.” << G4endl;
return;
// Testing:
G4VisManager* visManager( static_cast< G4VisManager * >(G4VVisManager::GetConcreteInstance() ) );
G4Scene* curScene( visManager->GetCurrentScene() );
G4bool isValid = true;
if ( ! curScene ) isValid = false;
G4VViewer* curViewer( visManager->GetCurrentViewer() );
G4bool isViewer = true;
if ( ! curViewer ) isViewer = false;
if (isValid && isViewer){
G4cout << "Initialised visManager at EndOfRunAction with refresher: " << curScene->GetRefreshAtEndOfRun()
<< " and using auto-refresh: " << curViewer->GetViewParameters().IsAutoRefresh() << G4endl;
}
else if (isValid){
G4cout << "Initialised visManager at EndOfRunAction with refresher: " << curScene->GetRefreshAtEndOfRun() << G4endl;
}
else{
G4cout << “No visManager at EndOfRunAction” << G4endl;
}
}
So, you can see from myEventAction::EndOfEventAction(…),
it should keep 2 of my 10 events (i.e. /run/beamOn 10). As before with attempting my original trj->DrawTrajectory(), I should have only had 2 events worth of trajectories. In both approaches, I had all 10 events drawn, but only if I used /vis/scene/add/trajectories in my vis.mac. If I did not include /vis/scene/add/trajectories, nothing was drawn (or was invisible).
If you look at my myRunAction::EndOfRunAction(…) you can see that I did some diagnostics of G4VisManager, specifically in EndOfRun(), namely this section:
G4VisManager::EndOfRun() *************************
if (GetConcreteInstance() && valid) {
if (fpScene->GetRefreshAtEndOfRun()) {
fpSceneHandler->DrawEndOfRunModels();
if (fpViewer->GetViewParameters().IsAutoRefresh()) {
fpViewer->RefreshView();
}
fpViewer->ShowView();
fpSceneHandler->SetMarkForClearingTransientStore(true);
}
else { stuff}
You left a lot of comments in this section, and there are references to refreshing, and I was curious whether or not my drawings were being ‘refreshed’ out of the scene.
So, I am stuck… my approach for trj->DrawTrajectory() doesn’t work, nor does my G4EventManager->KeepTheCurrentEvent().
I put my /vis/verbose level to 6 and here is some of the output:
G4VisManager::GeometryHasChanged() called.
/vis/scene/notifyHandlers scene-0
G4VisManager::SetCurrentViewer: viewer now viewer-0 (OpenGLStoredQt)
G4VisManager::SetCurrentSceneHandler: scene handler now “scene-handler-0”
Viewer “viewer-0 (OpenGLStoredQt)” of scene handler “scene-handler-0”
refreshed at request of scene “scene-0”.
G4VisManager::SetCurrentViewer: viewer now viewer-0 (OpenGLStoredQt)
G4VisManager::SetCurrentSceneHandler: scene handler now “scene-handler-0”
Run 0 starts.
Run: 0; Seed: 1; start.
Initialised visManager at BeginOfRunAction with refresher: 1 and using auto-refresh: 1
Begin event number: 0 (0)
End event number: 0
Keeping event 0
Begin event number: 1 (1)
End event number: 1
Keeping event 1
Begin event number: 2 (2)
End event number: 2
Begin event number: 3 (3)
End event number: 3
Begin event number: 4 (4)
End event number: 4
Begin event number: 5 (5)
End event number: 5
Begin event number: 6 (6)
End event number: 6
Begin event number: 7 (7)
End event number: 7
Begin event number: 8 (8)
End event number: 8
Begin event number: 9 (9)
End event number: 9
Run terminated.
Run Summary
Number of events processed : 10
User=0.020000s Real=0.031626s Sys=0.010000s
Run 0 end.
10 events have been kept for refreshing and/or reviewing.
“/vis/reviewKeptEvents” to review them one by one.
“/vis/enable”, then “/vis/viewer/flush” or “/vis/viewer/rebuild” to see them accumulated.
#/vis/enable
/vis/drawOnlyToBeKeptEvents
#/vis/enable
/vis/viewer/flush
/vis/viewer/refresh viewer-0
Refreshing viewer “viewer-0 (OpenGLStoredQt)”…
Viewer “viewer-0 (OpenGLStoredQt)” refreshed.
(You might also need “/vis/viewer/update”.)
/vis/viewer/update viewer-0
Viewer “viewer-0 (OpenGLStoredQt)” post-processing triggered.
Viewer “viewer-0 (OpenGLStoredQt)” flushed.
/vis/viewer/update
Viewer “viewer-0 (OpenGLStoredQt)” post-processing triggered.
Traversing scene data…
Refreshing events in run…
Traversing scene data…
Refreshing events in run…
Graphics systems deleted.
Visualization Manager deleting…
G4 kernel has come to Quit state.
================== Deleting memory pools ===================
Number of memory pools allocated: 18; of which, static: 4
Dynamic pools deleted: 14 / Total memory freed: 0.46 MB
RunManagerKernel is deleted. Good bye 
Again, I am using 10.07
Micah