|Message: Re: Biasing already registered processes (from reference physics)||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)|
On Fri, 10 Feb 2017 19:12:51 GMT, Michael H. Kelsey wrote:
> I would like to apply simple biasing (secondary particle splitting) to > processes which have already been registered into the appropriate > ProcessManagers. Specifically, my physics list uses G4EmPenelopePhysics > to get a proper set of standard, reference processes and models. Then, I > want to go through the process lists for gammas and electrons, and > replace some of those processes with G4WrapperProcess versions.
Answering my own question: To do this properly, you must call G4ProcessManager::RemoveProcess() and ::AddProcess(), and that must be done outside the loop where you are looking for processes to wrap (otherwise, you will invalidate the iterator!).
So I implemented my action in two loops. First, I have an empty std::vector<G4VProcess*> which I fill with the base processes I want to wrap. Once that's finished, I loop over that vector, call procMan->RemoveProcess() for the base process, wrap the base process as desired, then call procMan->AddProcess() with the wrapper.
For completeness, I query procMan to get the "position indices" for each base process, and apply those same indices to the wrapper. That way, the process ordering is preserved.
-- Michael Kelsey