--> Download the tarball with all necessary tables here.
Compilation notes:
Assembly version should only be compiled on a 32-bit computer. Once compiled, the static executable can be used on 32- or 64-bit machine with a SSE2 instruction set. The datafiles become part of the executable, so if you change any of them (e.g., icemodel.dat) be sure to recompile.
GPU version needs (obviously) the CUDA driver and toolkit. You do not need the SDK. Use the latest driver/toolkit versions available for your platform. Check that the CUDA location in the Makefile and src files matches your toolkit configuration. Source the src file before running the compiled executable.
If your GPU only supports compute capability 1.1 comment out ACCL4 option (see below) and replace sm_12 with sm_11 in the Makefile before compiling.
Many options of the GPU version can be set in the ini.cxx file via the #define statements:
5 levels of acceleration layers: available in versions ≤ v14
#define ACCL0 required by the next two options
#define ACCL1 check for intersection with a box around an OM first
#define ACCL2 divide all detector space in cx by cy by cz cells
#define ACCL3 cycle through photons and propagation steps in same loop
#define ACCL4 get new photons from a common pool, one per thread block
--> if you want a deterministic simulation do not use this option
--> versions ≥ v15 rely on Makefile parameter arch=11/12 to disable/enable this feature
#define ACCL5 group the fastest (highest wavelength) blocks
#define ACCL6 accelerate by grouping strings of OMs
GPU configuration:
#define MLTP number of multiprocessors (used by ACCL5)
#define WNUM number of wavelength bins
--> should not be divisible by 13 when ACCL5 is disabled
#define OVER size of photon bunches along the muon track
#define NPHO maximum number of photons propagated by one thread
#define NTHR number of threads per thread block
--> NTHR*NBLK should not exceed the count of different random number multipliers
#define HNUM size of the output hit buffer
--> must hold hits from up to NPHO*NTHR*NBLK photons
other options:
#define OFLA do not create hits on the flasher DOM
#define ROMB use rhomb cells aligned with the array (in the directions dir1, dir2)
#define ASENS apply the OM angular sensitivity curve
#define TILT apply the known ice layer tilt
#define MAXLYS maximum number of ice layers in the icemodel.dat file
#define MAXGEO maximum number of in-ice OMs in the geo-f2k file
#define OVR DOM "oversize" scaling factor; default is 5
#define EFF correction for the 10% cable shadowing (default is 0.9)
#define MAS maximum of the angular sensitivity curve (default is 0.75 for the hole ice)
Run time options:
./ppc [device] (f2k muons)
--> expects the output of mmc (with the -recc option) on stdin
./ppc [str] [om] [num] [device] (flasher)
--> the list of devices and this option list is printed when run without parameters.
--> Positive [str] simulates horizontal flashers, negative [-str] simulates tilted flashers.
--> str=0 and om=1,2 simulates standard candles 1 and 2.
--> you must set "export WFLA=337" before simulating the standard candles (default is 405).
--> if [num] is specified as x*y, x photons are simulated y times (with y trailing empty lines).
Output:
HIT [str] [om] [time] [costh] (receiving OM string and OM#, time since flasher, cos(th) of arrival angle with the PMT axis)
--> Number of HITs is affected by ASENS (muons and flashers) and OFLA (flashers only) options.