pkgs/PhotonTransport (NOvA offline)

PhotonTransport simulates the production, propagation, and detection of photons in the detectors. At present there is exactly one runtime module, "SimpleTransport". It is part of the main detector simulation chain.

  • Input: Simulation/FLSHits (provided by g4nova via Simulation/TruthFilter)
  • Output: PhotonTransport/PhotonSignals


The PhotonTransport package provides the SimpleTransport module. Default configuration(s) are provided in job/simpletransport.fcl.

There are many configuration parameters for this module, but unless you are doing targeted studies, the defaults are what you want. Note that the overall light level is set by the product QuantumEff * CollectionEff * PhotonsPerMeV. If you wish to tune the light level, you only need to change one of these. CollectionEff is preferred for now.

Name Type Default Description
OutputFolder string "setrans" location of output PhotonSignals on the DetSim() branch
PhotonsPerMeV float 1200000000 blue photons per MeV of deposition; value is historical, but see note above.
QuantumEff float 0.85 APD quantum efficiency
CollectionEff float 8.23e-08 fiber collection efficiency; tuned to give 25 PE/MIP at the far end of the FD.
FiberIndexOfRefraction float 1.59 index of refraction for core of fiber. (Cladding has n=1.49 and n=1.42.)
EmissionTau float 9 time constant of fluor de-excitation in ns
TimeSpread float 2 time spread due to light bouncing around the cell -- a made up number for now!
ApplyFiberSmearing int 1 whether to apply time smearing due to non-direct photon travel down the fiber
AttenPars float 0.3137 289.5 0.1669 852.3 fiber attenuation parameters; see XML for more
TimeClustering float 2 photons closer than this many nanoseconds are clumped into a single PhotonSignal object (for file size savings)
Step float 2 step size for walking along each track segment, in cm
BirksConstant float 0.09 k_B of Birks' Law, in g/cm^2/GeV. 0.09 is a placeholder value
MessageLevel int 0 verbosity
NoAttenNoPoissonMode int 0 toggle a special mode where there is no attenuation and no stochastic effects

Technical description

The task is to turn energy depositions (FLSHits) into a collection of photoelectrons on the APDs (PhotonSignals). The following is performed for each FLSHit.

The track segment represented by the FLSHit has some length L. In steps of Step (a parameter; default 2 cm), the track segment is walked along, with each step assigned a proportional fraction (Step / L) of the deposited energy. The midpoint of the step (in particular, its z position in cell coordinates) is noted.

For each step's energy, the two fiber directions are treated independently, with half of the energy assigned to each direction. The distance to the APD is determined along each direction, and attenuation is applied (along with all the necessary scale factors, like photons/MeV, APD QE, etc.)

The result in a mean number of photoelectrons expected in each direction. A Poisson-distributed number (i.e., PEs) is chosen using these two means.

Each PE is then assigned a time. The time is the sum of:
  • original FLSHit time
  • particle time-of-flight to the location of the step in question
  • photon time-of-flight down the fiber
  • random shift for possible indirect paths down the fiber [NOvA doc-3445]
  • small Gaussian jitter to simulate photon travel time from the point of energy deposition to collection in the fiber
  • exponential delay for fluor de-excitation

When all PEs have been treated on a given cell, they are grouped into TimeClustering-wide batches (default: 2 ns). This way, hundreds of PEs all occurring within a fraction of a nanosecond of each other (common) will be represented by a single PhotonSignal object instead of by hundreds of PhotonSignal objects.

Although Birks' suppression is applied, dE/dX must be estimated as (total energy)/(length of track segment) for each FLSHit. Since dE/dX can vary significantly over the length of a segment, the suppression factor calculated will be biased toward to unity (i.e., less suppression than desired). If this ends up being critical, it could be fixed by playing with the treatment of step sizes in g4nova.