Closed AnderBiguri closed 1 year ago
protocol.spectrumUnit_mm = 0; # Is the spectrum file in units of photons/sec/mm^2/<current>? protocol.spectrumUnit_mA = 1; # Is the spectrum file in units of photons/sec/<area>/mA?
These two options are used for the case when the spectrum unit in the used spectrum files is not Photons/mA/mm^2/s@1m, which is desired by xcist. For example, if the unit is photons/mA/cm^2/s@1m, protocol.spectrumUnit_mm needs to be set to 0. [edited on March 2023 to make some corrections]
current
means tube current.
Regarding detector, currently we only support curved detector.
For the issue related to #27 please try the latest code as it has been fixed in #32
Thanks for the explanation. But in general, is there any further docs anywhere for this?
Is there any intention of supporting flat-panel detectors? If not, would it be possible for me to ask if you could point out which files are the relevant ones that define this geometry (I assume just the DD ray tracer) so I can try to make the changes? Supporting flat panel detectors is a "small" change in the ray-tracing code, right? or is there something else I am missing?
cfg.scanner.detectorCallback, currently Detector_ThirdgenCurved.py, defines the detector geometry. It's piece-wised geometry, made of many small flat detectors (modules). If there's only one module, i.e., at its line 21, if nMod is one, then it's a big flat detector.
@MingyeWu ah, that makes sense. Haven't tried it yet, but I assume that that big flat detector just sits normal to the source-detector line and all the standard geometry that you expect, right? I'll give it a shot and try.
Should I change the code, or just setting ct.scanner.detectorColCount=1
(or actually, more correctly, ct.scanner.detectorColCount=cfg.scanner.detectorColsPerMod
) be sufficient? Or does this parameter has some undesired effects somewhere else in the code (I've seen its user quite a bit).
Yes, the geometry is that the center ray of each module is perpendicular to the module. ct.scanner.detectorColCount should be the number of columns of the detector, and yes, set ct.scanner.detectorColCount=cfg.scanner.detectorColsPerMod.
Thanks. I still have some questions about how to run some of the things, I'll ask them here if that's ok:
I want the projection data (sinograms), not the recon from the simulations. When I run the demos, I can get tif files of the recon, but the other output files (.scan, .offset etc) are a bit opaque on what they do and what they are. Is any of these the projection data? how can I get that?
sinograms are files ending with .prep, and you can read them using
xcist.rawread('xxx.prep', [views, rows, cols], 'float')
Hi!
A bit of a generic question.
I am trying to, given a 2D phantom of materials of my own, simulate a flat pannel standard CT scanner, I guess with all "turned on".
However I am finding a bit hard time understanding what parameters mean in general. e.g.
protocol.spectrumUnit_mm = 0; # Is the spectrum file in units of photons/sec/mm^2/<current>?
What does this mean? is
0=photons
,1=sec
etc? what is<current>
? current, as in electrical current?or
scanner.detectorCallback = "Detector_ThirdgenCurved" # name of function that defines the detector shape and model
What are other options?On top of that, partially due to #27 I have not been able to run any full demo to try to inspect values of functions etc and learn a bit more about it.
Where do you suggest I start looking at this? I'd be happy to help adding more demos/docs/code, if that helps.