docs: def get_mmr_constants():
      '''
      Put all the constants together in a dictionary
      '''
  
      Cnt = {
          'ISOTOPE':'F18',
          'DCYCRR':DCYCRR,
          'ALPHA':ALPHA,
          'NRNG':NRNG,
          'NSRNG':NSRNG,
          'NCRS':NCRS,
          'NCRSR':NCRSR,
          'NBCKT':224,
          'NSANGLES':A,
          'NSBINS':W,
          'Naw':-1,   # number of total active bins per 2D sino
          'NSN11': NSN11, # number of sinos in span-11
          'NSN1': NSN1, # number of sinos in span-1
          'NSN64': NSN64, # number of sinos in span-1 with no MRD limit
          'MRD': MRD, # maximum ring difference RD
          'SPN':SPAN, # span-1 (1), span-11 (11), ssrb (0)
          'TFOV2':TFOV2, # squared radius of TFOV
  
          'RNG_STRT':RNG_STRT, # limit axial extension by defining start and end ring
          'RNG_END' :RNG_END,  # this feature only works with span-1 processing (Cnt['SPN']=1)
  
          'SS_IMZ':SS_IMZ, #Scatter mu-map iamge size 
          'SS_IMY':SS_IMY,
          'SS_IMX':SS_IMX,
          'SS_VXZ':SS_VXZ,
          'SS_VXY':SS_VXY,
          'IS_VXZ':IS_VXZ,
          'SSE_IMZ':SSE_IMZ, #Scatter emission image size
          'SSE_IMY':SSE_IMY,
          'SSE_IMX':SSE_IMX,
          'SSE_VXZ':SSE_VXZ,
          'SSE_VXY':SSE_VXY,
          'SZ_IMZ':SZ_IMZ, #GPU optimised image size
          'SZ_IMY':SZ_IMY,
          'SZ_IMX':SZ_IMX,
          'SZ_VOXZ':SZ_VOXZ,
          'SZ_VOXY':SZ_VOXY,
          'SZ_VOXZi':SZ_VOXZi,
          'SO_IMZ':SO_IMZ, #Original image size (from Siemens)
          'SO_IMY':SO_IMY,
          'SO_IMX':SO_IMX,
          'SO_VXZ':SO_VXZ,
          'SO_VXY':SO_VXY,
          'SO_VXX':SO_VXX,
          'NSEG0':SEG0,
          'RE':RE, #effective ring radius
          'R':R,
          'SEG':seg,
          'MNRD':minrd,
          'MXRD':maxrd,
          'SCTRNG':sct_irng,
          'TGAP':TGAP,
          'OFFGAP':OFFGAP,
          'AXR':AXR,
          'R02':R02, #squared electron radius
          'LLD':LLD, #lower energy threashold
          'E511':E511,
          'ER':ER, #energy resolution
          'COSUPSMX':COSUPSMX, #cosine of max allowed scatter angle
          'NCOS':NCOS, #number of cos samples for LUT
          'COSSTP':COSSTP, #cosine step
          'ICOSSTP':ICOSSTP, #inverse of cosine step
          'ETHRLD':ETHRLD, #intensity emission image threshold (used in scatter modelling)
          'CLGHT':CLGHT, #speed of light [cm/s]
          'CWND':CWND,    #coincidence time window [ps]
          'TOFBINN':TOFBINN, #number of TOF bins
          'TOFBINS':TOFBINS,   #TOF bin width [ps]
          'TOFBIND':TOFBIND,
          'ITOFBIND':ITOFBIND,
          # affine and image size for the reconstructed image, assuming the centre of voxels in mm
          'AFFINE':np.array([ [-10*SO_VXX, 0., 0., 5.*SO_IMX*SO_VXX ], #+5.*SO_VXX
                              [0., 10*SO_VXY, 0., -5.*SO_IMY*SO_VXY ], #+5.*SO_VXY
                              [0., 0., 10*SO_VXZ, -5.*SO_IMZ*SO_VXZ ], #-5.*SO_VXZ
                              [0., 0., 0., 1.]]),
          'IMSIZE':np.array([SO_IMZ, SO_IMY, SO_IMX]),
  
  
          'BTP':0, #1:non parametric bootstrap, 2: parametric bootstrap (recommended)
          'BTPRT':1.0, # Ratio of bootstrapped/original events (enables downsampling)
  
          'VERBOSE':False,
  
          'SCTSCLEM':SCTSCLEM,
          'SCTSCLMU':SCTSCLMU,
      }
  
      # get the setup for GPU and third party apps
      Cnt = get_setup(Cnt=Cnt)
  
      return Cnt