xcist / main

simulation and reconstruction package
BSD 3-Clause "New" or "Revised" License
47 stars 24 forks source link

Documentation of what parameter options are #31

Closed AnderBiguri closed 1 year ago

AnderBiguri commented 1 year ago

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.

zhangjy-ge commented 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

AnderBiguri commented 1 year ago

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?

MingyeWu commented 1 year ago

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.

AnderBiguri commented 1 year ago

@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).

MingyeWu commented 1 year ago

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.

AnderBiguri commented 1 year ago

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?

zhangjy-ge commented 1 year ago

sinograms are files ending with .prep, and you can read them using xcist.rawread('xxx.prep', [views, rows, cols], 'float')