|Message: Re: Saving partial results||Not Logged In (login)|
Click on the Forum title, e.g. on the "Forums by Category" page, to read a sequence of postings to the Forum and its threads all in one page. If you are only interested in one thread or the thread following a specific posting, click the thread or the posting, which takes you to a smaller page, which contains only the part you are interested in and may be easier to navigate.
Messages are "chained" if there are only replies at the first level, i.e. 1/1.html, 1/1/1.html etc. In case of "chained" messages the message number is replaced by the icon and there is no indentation.
Inline: Display the subject line only or also the text of the posting(s); for the choice "All" the "Outline" choices are switched off.
|1||0||1||no text / full text of posting|
|2||1||All||text for level 1 only / text for All postings|
Outline: Choose the depth of the posting thread, successive toggle controls provide increasing detail.
|1||2||1||2 levels / 1 level (original posting)|
|2||3||2||3 levels / 2 levels|
|3||3||All||3 levels / all levels (all postings)|
I've worked some more on this problem, and now I have a different question: In multithreaded mode, how can I prompt a call to G4VUserActionInitialization::Build after having already called beamOn once?
And here's some context if that helps. Let's go back to the 1000 events that I wanted to split up into 50-event slices. What I do now is loop over beamOn and execute twenty runs á 50 events each. The position of the initial particle is calculated by a dedicated class called ParticlePosition, that defines x(t). I added two new variables to this class: The total number of events to be simulated, Nsim (1000 in this example), and the number of events completed by previous runs, Noffset. Time then becomes t = (Noffset + N)/Nsim where N is the event number of the current event (i.e. a number between 0 and 49 in this example). Before each call to beamOn, I update Noffset. And this is where I run into trouble.
The program is structured such that an ActionInitialization is created in the main function. This ActionInitialization has a ParticlePosition variable. In ActionInitialization::Build a PrimaryGeneratorAction is created, and the ParticlePosition is passed to its constructor. Everything works fine the first time beamOn is called. For each subsequent turn in the loop, I update the Noffset in the ParticlePosition owned by the ActionInitialization and call runManager->SetUserInitialization(actionInitialization) before the next call to beamOn. Had it been a single-threaded G4RunManager, Build would have been invoked. But because it is a G4MTRunManager, only BuildForMaster is invoked. No new PrimaryGeneratorAction object is created, because that happens in Build. How can I relay the updated ParticlePosition to my PrimaryGeneratorAction? Is there a way to destroy the worker threads and then re-create them (which would invoke Build)?
Thanks in advance!
|Inline Depth:||Outline Depth:||Add message:|