Point detector scorer

The point detector scorer covers the problems where the quantity to be calculated is the flux or the dose of neutral particles (neutrons or gammas) in a very small detector (small with respect to the setup dimensions) situated far from the primary particles source. In this kind of problems the fraction of particles that reach the detector is very reduced, and threfore if one wants to calculate the flux or dose by conventional methods the statistics needed would be prohibitive.

The technique implemented in GAMOS is similar to the F5 tally implemented in MCNP. It is based on the following idea: normal tracks are propagated and for each neutron or gamma interaction is calculated the probability that it would be deviated in the direction of the point detector (instead of the real direction towards which it is deviated) and the probability that it reaches the point detector without any further interaction. The first probability is based on a precalculated table of angle probabilities for each interaction type, each material and each energy, multiplied by the solid angle covered by the point detector. The second probability is based of the number of mean free paths that the neutron or gamma would have to traverse along the path to reach the point detector. A similar calculation is done for each neutron or gamma initial step, except that the angle probability it is based on is simplified as a constant distribution in the local reference system of the parent particle (i.e. probability equal to 0.5). Summing up these probabilities for a number of events, usuallly several orders of magnitude less than with conventional methods, one can get the flux and the energy spectrum at the point detector, and with these magnitude the equivalent doses (H*, Hp(0,15,...)) can be obtained.

In this chapter we describe first the theoretical basis of the method. Then we explain how it is implemented in GAMOS, how to select the different available options, and which are the possible outputs (tables or histograms). In the third part we describe the several variance reduction techniques that can be used to readuce the CPU time, and give some recommendations on how to use the output table and histograms to help in determining the best variance reduction techniques for a given problem.

Theoretical basis

The point detector scorer calculates the fulx at a point based on the probability that particles reach it. Suppose we call p(μ,φ) the probability that at a source or neutron/gamma interaction the the particle produced or scattered goes into the solid angle dΩ about the direction (μ , φ ), where μ = cos(θ). if R is the distance to the detector from the source or interaction point

Figure 1.

yields the probability that the particle reaches the detector point with no further collisions, where

Figure 2.

is the attenuation of a beam of monoenergetic particles passing through a material medium, where s is measured along the direction from the source or interaction point to the detector and Σ(s) is the macroscopic total cross section at s. If dA is an element of area normal to the line of flight to the detector, dΩ = dA/ R2. As the flux is the number of particles passing through a unit area normal to the line of flight direction, we can write the flux as

Figure 3.

If there is azimuthal geometry, then p(μ,φ) = p(μ) / 2 π , and we can finally write

Figure 4.

The attenaution term, exp(-λ) is calculated summing up the number of interaction lengths from the source or interaction point until the detector; this calculation depends on the neutron/gamma energy and the materials traversed, and it is computed in GAMOS through the use of geantino [1].

The R2 term in the denominator causes a singularity: when a source or interaction event occurs near the detector point, R approaches zero and the flux approaches infinity. The technique is still valid and unbiased, but convergence is slower and often impractical. To avoid this singularity, a fictitious sphere of radius R0 surrounding the detector point is defined (which we call the exclusion sphere). If we can assume that the flux is uniformly distributed inside this sphere, then it can be demonstrated that the average flux in the sphere is

Figure 5.

The exclusion sphere radius has a default value of 1 mm, which can be changed with the parameter

/gamos/setParam GmPDS:ExclusionRadius RADIUS

GAMOS implementation

The point detector scorer is selected as other GAMOS scorers, although, as explained below, it does not really behave as the other scorers. To activate you have to select the user action:

/gamos/userAction GmPDSUA

But before this command you have to set the parameters that drive the behaviour of the point detector scoring. You may first decide if you want to score the flux for neutrons, gammas or for both with the two parameters

/gamos/setParam GmPDS:ScoreNeutrons 1/0

/gamos/setParam GmPDS:ScoreGammas 1/0

There are several parameters that you may change distinctly for neutrons or gammas, or that you may want to set the same value for both. All the parameters start with GmPDS and then they are followed by neutron: or gamma:; if the second word is not one of these two, then the parameter serves for both. We will then omit this word in the explanation of the parameters in this section, but remember you can always add it, except in the cases where it is explicitly mentioned that there is a unique parameter for both particles.

Creating angle deviation probability densities

The first thing you should do before running your point detector scoring job, is to create a file that contains the probability density functions of the emission angles for each energy, process and material. Else GAMOS will assume flat probabilities for all angles (what may be enough in your case).

To do this you can run a job that writes in a ROOT file the probability of emission angle for all the materials that constitute your setup. You may follow the example found in tutorials/ShieldingTutorial/exercise3/exercise3.angle.gg.in, that we explain here. The class that makes the work is called GmPDSCreateAngleTablesUA, but remember that the parameters have to go before the class that uses them, so you should add this line at the end of your script

/gamos/userAction GmPDSCreateAngleTablesUA

The histogram will only be saved for the secondary particle type defined with the parameter

/gamos/setParam USER_ACTION_NAME:SecondaryParticleName NAME

The histogram file name is by default angleDeviation, but it can be changed by the parameter

/gamos/setParam USER_ACTION_NAME:HistoFileName NAME

To create the tables for different materials and tables you may use the generator GmGeneratorChangeEnergyAndMaterials (see section on Event generator changing energy and material).

If you have in your setup several particles that produce neutrons (or gammas) you should repeat the process with different primary particle types. Then you may add all histograms in a file by using the ROOT command

hadd MERGED_FILE.root FILE1.root FILE2.root ...

The file created in this way should be passed to the point detector scorer.

/gamos/setParam GmPDS:AngleDeviationFileName FILE_NAME

the default name is angleDeviation.neutron.root for neutrons and angleDeviation.gamma.root for gammas.

When this file is read it will be checked if the number of events in each histograms is big enough, else the histogram will not be used. You may control the minimum number of events in the histogram with the parameter:

/gamos/setParam GmPDS:InteractionAngleManager::MinimumNumberOfEntries VALUE

Point detector volume

The detector where the flux will be scored has to be a real volume in your geometry. It should be an small volume, as small as you want, although you may decide to make it the size of the real detector in your experiment. It is important to take into account that despite the flux is calculated as the probability that tracks reach the detector, if a track actually reaches it, it will also be counted. The name of the detector volume is given with the parameter

/gamos/setParam GmPDS:DetectorName VOLUME_NAME

If you want to score the flux in several points you may place the detector volume at several places.

Energy and dose equivalent bins

The flux will be scored in different energy bins. These energy bins should be defined in a file whose name is

/gamos/setParam GmPDS:EnergiesFileName FILE_NAME

The format of this file is a set of one-column lines with the energy values.

There are several dose equivalent magnitudes that can be calculated, namely the ambient dose and the personal dose at several angles: 0, 15, 30, 45, 60, 76. To select them you have to set the following parameters (not a different one for neutrons and gammas)

/gamos/setParam GmPDS:PrintHstar 1

/gamos/setParam GmPDS:PrintHp0 1

/gamos/setParam GmPDS:PrintHp15 1

/gamos/setParam GmPDS:PrintHp30 1

/gamos/setParam GmPDS:PrintHp45 1

/gamos/setParam GmPDS:PrintHp60 1

/gamos/setParam GmPDS:PrintHp75 1

For each magnitude you have to define the conversion factor for each energy bin. These are defined in a file whose name is given by the parameter

/gamos/setParam GmPDS:Flux2DoseFileName FILE_NAME

This file must contain in each line the energy and the conversion factors in pSv cm2 for the magnitudes: H*(10) H_pslab(10,0) H_pslab(10,15) H_pslab(10,30) H_pslab(10,45) H_pslab(10,60) H_pslab(10,75). The default name of this file is Flux2Dose.neutron.ICRU57.lis for neutrons and Flux2Dose.gamma.ICRU57.lis for gammas. These two files contain the conversion factor given by the ICRU57 report, and can be found in the data directory of the GAMOS release. By default these files will also be used to read the list of energy bins to be used for the flux results.

Scoring with filters

As for any user action, you may add one or more filters so that only track steps that pass them will be scored. The filter is applied to the neutron or gamma that creates the geantino, not to the geantino that reaches the detector.

By default the filter will act on the G4Track, but it may act on the G4Step if the following parameter is set.

/gamos/setParam GmPDS:FiltersOnTrack 0

Scoring per category

The scoring of flux and equivalent dose can be split following different criteria.

The first possibility is to score separately the contributions from the real particles that reach the point detector and the indirect contributions calculated with the geantinos. The first one will have in the score name the word Neutron or Gamma, while the second one will have the word Geantino. To activate this option the following parameter should be used

/gamos/setParam GmPDS:ScoreSeparatelyTrueAndGeantino 1

The second possibility is use a classifier and get a different score for each classifier index. You can add a classifier to GmPDSUAas you do for any other user action. By default the classifier will act on the G4Track, but it may act on the G4Step if the following parameter is set.

/gamos/setParam GmPDS:ClassifierOnTrack 0

Output format

At the end of the run the results are written in the standard output or in a file given by the parameter

/gamos/setParam GmPDS:ResultsFileName FILE_NAME

The following table is written for each score or neutrons or gammas (one per point detector copy, one per category as describe above). First a line with the filter names, classifier name, particle type, detector name and copy, score type (named ALL if it is not a sub category), the detector position and the number of events in the job. Then follows a line for each energy with the filter names, classifier name, particle type, detector name and copy, score type, energy value, flux value, relative flux error (error divided by value), number of particles contributing to the flux and then, for later statistical processing, sum of flux values squared, and to the third and fourth power. After all energies comes a line with the total sum of flux in all energies, which has the filter names, classifier name, particle type, detector name and copy, score type, the words FLUX_TOTAL/particle followed by the total flux value and relative error and the total number of particles contributing to the flux. If the dose equivalent magnitudes are required, they come at the end in a line starting also with the filter names, classifier name, particle type, detector name and copy and score type followed by the magnitude name (Hstar, Hp(10,0), Hp(10,15), ...). An example output is the following


  %%%%%% SCORE IN POINT DETECTOR FOR set ALL: NeutronInelastic: gamma: PD1: ALL: at (4800,0,0) NEVENTS= 1000
  ALL: NeutronInelastic: gamma: PD1: ALL: ENERGY= 0.01 FLUX= 0 +-(REL) 0  N 6 Fwei2 0 Fwei3 0 Fwei4 0
  ALL: NeutronInelastic: gamma: PD1: ALL: ENERGY= 0.015 FLUX= 0 +-(REL) 0  N 0 Fwei2 0 Fwei3 0 Fwei4 0
  ...
  ALL: NeutronInelastic: gamma: PD1: ALL:  FLUX_TOTAL/particle= 1.33272e-13 +-(REL) 0.97118  N 12
  ALL: NeutronInelastic: gamma: PD1: ALL: Hstar= 1.49381e-13 pSv/particle 

Control Histograms

There are several optional histograms that may help you in better understanding the behaviour of your point detector scoring. By default they are created, but you can switch them off with the parameter

/gamos/setParam GmPDS:ControlHistograms 0

The histograms are written in a file named pds, but this name can be changed with the parameter:

/gamos/setParam GmPDS:HistosFileName VALUE

All histograms start with the filter names, classifier name and particle type. There is an histogram about the particle interaction.

  • interaction log Energy (MeV): Kinetic energy of neutrons/gamma at each step initial position.

A set histograms are about the distance to each detector, so they also have the detector name and copy:

  • interaction dist to detector (mm): Distance from each neutron interaction or origin to the detector.

  • interaction dist to detector (mm) weighted by Hstar: Distance from each neutron interaction or origin to the detector, weighted by Hstar.

  • interaction dist to detector (mm) vs weight: Distance from each neutron interaction or origin to the detector versus weight when detector is reached.

The rest of histograms are for each detector copy and score type. The variables are calculated when the geantino or neutron/gamma reaches the detector, so they have the name At detector, and they also have the score type. There is a set for the geantinos and another set for the neutron/gamma particles. They are the following:

  • log10(energy) (MeV): log10 of track kinetic energy times the weight.

  • log10(energy) no weighted (MeV): log10 of track kinetic energy.

  • log10(energy) weighted by Hstar: log10 of track kinetic energy times the weight and Hstar value.

  • log10(weight): log10 of track weight.

  • log10(weight) weighted by Hstar: log10 of track weight times the weight and Hstar value.

  • log10(energy) vs log10(weight): log10 of track kinetic energy versus track weight.

Variance reduction techniques

There are three variance reduction techniques available, that will provide a better efficiency, i.e. less CPU time for the same error.

Kill contributions of low weight

The first technique consist on not taking into account the contributions of low weight. It works checking the weight of the geantinos at each step of their propagation (each time they change volume) and playing Russian roulette with them if their way is smaller than the value given by the parameter

/gamos/setParam GmPDS:UseMinimumGeantinoWeight MIN_WEIGHT

which by default takes a value of 1.E-30. The Russian roulette factor is given by the parameter

/gamos/setParam GmPDS:MinimumGeantinoWeightRRFactor VALUE

which by default takes a value of 100. To activate this technique you have to set the parameter

/gamos/setParam GmPDS:UseVRMinimumGeantinoWeight 1

You may use the control histograms, specially the histogram log10 of geantino kinetic energy versus geantino weight to determine which are the minimum weight and Russian roulette factor that best match your application.

Kill contributions too far from detector

A more efficient technique consists on not taking into account the contributions of interactions or sources that are too far from the detector, without the need to send a geantino to calculate the probability to reach it. But this technique assumes that the probability is smaller if the point is farther from the detector, what is not always the case, as it may be that a point closer to the detector traverses denser materials. Indeed the contributions are not eliminated, but, to avoid biasing Russian roulette is played. The maximum distance is set with the parameter

/gamos/setParam GmPDS:MaximumDistance DISTANCE

which by default takes a value of 1000 mm. The Russian roulette factor is given by the parameter

/gamos/setParam GmPDS:MaximumDistanceRRFactor VALUE

which by default takes a value of 100. To activate this technique you have to set the parameter

/gamos/setParam GmPDS:UseVRMaximumDistance 1

You may use the control histograms, specially the histogram Neutron: PD N: interaction dist to detector (mm) vs weight to determine which are the maximum distance and Russian roulette factor that best match your application.

Split particles of big weight

The idea of this technique is to sample more those cases which bigger probabilities. It may be very useful also to eliminate the seldomly occurring big weight contributions that will make your error big. The user defines a minimum and maximum weight for the particles to be split:

/gamos/setParam GmPDS:MinimumWeightForSplitting MIN_VALUE

which by default takes a value of 1.E-30

/gamos/setParam GmPDS:MaximumWeightForSplitting MAX_VALUE

which by default takes a value of 1.E-5; and the maximum splitting number:

/gamos/setParam GmPDS:MaximumSplitting MAX_SPLIT

which by default takes a value of 100.

Each time a geantino reaches the detector, its weight will be checked. If it is between the minimum and maximum, the splitting number will be calculated making a logarithmic interpolation using 0 at the minimum weight and the maximum splitting number at the maximum weight. If this number, nSplit, is bigger than one, nSplit-1 particles will be created at the position, direction, energy and time of the neutron or gamma that created the geantino.

To activate this technique you have to set the parameter

/gamos/setParam GmPDS:UseVRSplitting 1

You may use the control histograms, specially the histogram SCORE_NAME At detector : geantino : log10(energy) vs log10(weight) to determine which are the minimum and maximum weight and splitting number that best match your application.

Sum scoring results and plot them

If you want to sum the scoring results from several jobs, for example, because you have split a long job in several ones, there is an utility to do it. You first have to build a file with the list of files you want to sum, one line per file. Then you have to run the utility sumScores . This utility will scan all files and will looks for all scorers with the same name (same MultiFunctionalDet: and PrimitiveScorer:). It merges this scorers calculating the average of each score. It also propagates the error and gives it relative to the value (divided by it); and it also gets the error as the deviation of the values, i.e. as the

Notes

[1]

A geantino is a pseudoparticle that has only transportation, but no physical process.