Deprecated ‐ Configuration parameter definitions - xcist/documentation GitHub Wiki

Simulation experiments are defined by five configuration files

  • Scanner_name.cfg : configuration file that defines the scanner itself, including the geometry and some inherent parameters of the particular scanner
  • Phantom_name.cfg : configuration file that defines the phantom to be ‘scanned’
  • Protocol_name.cfg : configuration file that defines the scan protocol, including scan technique, spectrum, filtration, etc.
  • Physics_name.cfg : configuration file that defines the simulation-level parameters that determine the accuracy at which the simulation is performed
  • Recon_name.cfg : configuration file that defines the reconstruction parameters

We recommend to stick to these configuration filename conventions and parameter grouping. This will allow for easily mix-and-matching phantoms, scanner models, etc.

The specific configuration parameters include :

  • Scanner geometry
    scanner.detectorCallback = “Detector_ThirdgenCurved” # name of function that defines the detector shape and model
    scanner.sid = 540.0 # source-to-iso distance (mm)
    scanner.sdd = 950.0 # source-to-detector distance (mm)
    scanner.detectorColsPerMod = 1 # number of detector columns per module
    scanner.detectorRowsPerMod = 16 # number of detector rows per module
    scanner.detectorColOffset = 0.0 # detector column offset relative to centered position (in detector columns)
    scanner.detectorRowOffset = 0.0 # detector row offset relative to centered position (in detector rows)
    scanner.detectorColSize = 1.0 # detector column pitch or size (mm)
    scanner.detectorRowSize = 1.0 # detector row pitch or size (mm)
    scanner.detectorColCount = 900 # total number of detector columns
    scanner.detectorRowCount = scanner.detectorRowsPerMod # total number of detector rows
    scanner.detectorPrefilter = [‘Al’, 0.1, ‘water’, 2] # material file name(s) and material thickness(es) (mm)
  • X-ray tube
    scanner.focalspotCallback = “Source_Uniform” # name of function that defines the focal spot shape and model
    scanner.targetAngle = 7.0 # target angle relative to scanner XY-plane (in degrees)
    scanner.focalspotWidth = 1.0
    scanner.focalspotLength = 1.0
  • Detector
    scanner.detectorMaterial = “Lumex” # detector sensor material
    scanner.detectorDepth = 3.0 # detector sensor depth (mm)
    scanner.detectionCallback = “Detection_EI” # name of function that defines the detection process (conversion from X-rays to detector signal)
    scanner.detectionGain = 15.0 # factor to convert energy to electrons (electrons / keV)
    scanner.detectorColFillFraction = 0.9 # active fraction of each detector cell in the column direction
    scanner.detectorRowFillFraction = 0.9 # active fraction of each detector cell in the row direction
    scanner.eNoise = 5000.0 # standard deviation of Gaussian electronic noise (in electrons)
  • Photon counting CT
    scanner.detectorMaterial = “CZT” # detector sensor material
    scanner.detectorDepth = 1.6 # detector sensor depth (in mm)
    scanner.detectionCallback = “Detection_PC” # name of function that defines the detection process (conversion from X-rays to detector signal)
    scanner.detectionResponseFilename = ‘PC_spectral_response_CZT0.25×0.25×1.6.mat’ # name of the response data file
    scanner.detectorBinThreshold = [20, 30, 40, 60, 80, 100, 160] # energy thresholds (keV), n bins has n+1 thresholds; the first and last are the min and max energy thresholds.
    scanner.detectorSumBins = 0 # 1: sum all bins (gray scale output), data dim [view row col]; 0: output multiple bins [view row col bin]
  • simulations sequence
    protocol.scanTypes = [1, 1, 1] # flags for airscan, offset scan, phantom scan
  • Table and gantry
    protocol.scanTrajectory = “Gantry_Helical” # name of the function that defines the scanning trajectory and model
    protocol.viewsPerRotation = 1000 # total numbers of view per rotation
    protocol.viewCount = 1000 # total number of views in scan
    protocol.startViewId = 0 # index of the first view in the scan
    protocol.stopViewId = protocol.startViewId+protocol.viewCount-1 # index of the last view in the scan
    protocol.airViewCount = 1 # number of views averaged for air scan
    protocol.offsetViewCount = 1 # number of views averaged for offset scan
    protocol.rotationTime = 1.0 # gantry rotation period (in seconds)
    protocol.rotationDirection = 1 # gantry rotation direction (1=CW, -1 CCW, seen from table foot-end)
    protocol.startAngle = 0 # relative to vertical y-axis (n degrees)
    protocol.tableSpeed = 0 # speed of table translation along positive z-axis (mm/sec)
    protocol.startZ = 0 # start z-position of table
    protocol.tiltAngle = 0 # gantry tilt angle towards negative z-axis (in degrees)
    protocol.wobbleDistance = 0.0 # focalspot wobble distance
    protocol.focalspotOffset = [0, 0, 0] # focalspot position offset
  • X-ray tube technique and filtration
    protocol.mA = 200 # tube current (in mA)
    protocol.spectrumCallback = “Spectrum” # name of function that reads and models the X-ray spectrum
    protocol.spectrumFilename = “tungsten_tar7_120_filt.dat” # name of the spectrum file
    protocol.spectrumScaling = 1 # scaling factor such that spectrum is in photons / mA / s / mm^2 at 1000 mm
    protocol.bowtie = “medium” # name of the bowtie file (or [])
    protocol.filterCallback = “Xray_Filter” # name of function to compute additional filtration
    protocol.flatFilter = [‘Al’,0.1] # additional filtration – materials and thicknesses (mm)
    protocol.dutyRatio = 1.0 # tube ON time fraction (for pulsed tubes)
  • Phantom
    phantom.callback = “Phantom_Voxelized” # name of function that reads and models phantom
    phantom.projectorCallback = “C_Projector_Voxelized” # name of function that performs projection through phantom
    phantom.filename = ‘BIG.json’ # phantom filename
    phantom.centerOffset = [0, 0, 0] # offset of phantom center relative to origin (mm)
  • Geometric and energy sampling
    physics.energyCount = 12
    physics.monochromatic = -1 # monochromatic energy in kVp. if negative, means polychromatic.
    physics.colSampleCount = 2
    physics.rowSampleCount = 2
    physics.srcXSampleCount = 2
    physics.srcYSampleCount = 2
    physics.viewSampleCount = 2
  • Flags to determine what has to be recalculated each view
    physics.recalcDet = 0
    physics.recalcSrc = 0
    physics.recalcRayAngle = 0
    physics.recalcSpec = 0
    physics.recalcFilt = 0
    physics.recalcFlux = 0
    physics.recalcPht = 0
    physics.recalcDet = 0
  • Noise on/off settings
    physics.enableQuantumNoise = 1
    physics.enableElectronicNoise = 1
  • Internal physics models
    physics.rayAngleCallback = “Detector_RayAngles_2D”
    physics.fluxCallback = “Detection_Flux”
    physics.scatterCallback = ""
    physics.prefilterCallback = “Detection_prefilter”
    physics.crosstalkCallback = ""
    physics.lagCallback = ""
    physics.opticalCrosstalkCallback = ""
    physics.DASCallback = “Detection_DAS”
  • I/O preferences
    physics.outputCallback = “WriteRawView”
  • Reconstruction
    recon.fov = 500.0 # diameter of the reconstruction field-of-view (mm)
    recon.imageSize = 512 # number of columns and rows to be reconstructed (square)
    recon.sliceCount = 1 # number of slices to reconstruct
    recon.sliceThickness = 1.0 # reconstruction inter-slice interval (mm)
    recon.centerOffset = [0.0,0.0,0.0] # reconstruction offset relative to center of rotation (mm)
⚠️ **GitHub.com Fallback** ⚠️