SIRF  3.4.0
cstir.h
1 /*
2 SyneRBI Synergistic Image Reconstruction Framework (SIRF)
3 Copyright 2015 - 2017 Rutherford Appleton Laboratory STFC
4 Copyright 2015 - 2017, 2022 University College London.
5 
6 This is software developed for the Collaborative Computational
7 Project in Synergistic Reconstruction for Biomedical Imaging (formerly CCP PETMR)
8 (http://www.ccpsynerbi.ac.uk/).
9 
10 Licensed under the Apache License, Version 2.0 (the "License");
11 you may not use this file except in compliance with the License.
12 You may obtain a copy of the License at
13 http://www.apache.org/licenses/LICENSE-2.0
14 Unless required by applicable law or agreed to in writing, software
15 distributed under the License is distributed on an "AS IS" BASIS,
16 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 See the License for the specific language governing permissions and
18 limitations under the License.
19 */
20 
21 #ifndef cSTIR_INTERFACE
22 #define cSTIR_INTERFACE
23 
24 #ifndef CSTIR_FOR_MATLAB
25 #define PTR_INT size_t
26 #define PTR_FLOAT size_t
27 #define PTR_DOUBLE size_t
28 extern "C" {
29 #else
30 #define PTR_INT int*
31 #define PTR_FLOAT float*
32 #define PTR_DOUBLE double*
33 #endif
34 
36  //void* setParameter
37  // (void* ptr, const char* obj, const char* name, const void* value);
38  //void* parameter(const void* ptr, const char* obj, const char* name);
39 
40  // Global
41  void* cSTIR_setVerbosity(const int verbosity_ptr);
42  void* cSTIR_getVerbosity();
43  void* cSTIR_setOMPThreads(const int threads);
44  void* cSTIR_getOMPThreads();
45  void* cSTIR_useDefaultOMPThreads();
46  void* cSTIR_getDefaultOMPThreads();
47  void* cSTIR_scannerNames();
48 
49  // Common STIR Object methods
50  void* cSTIR_newObject(const char* name);
51  void* cSTIR_objectFromFile(const char* name, const char* filename);
52  void* cSTIR_setParameter
53  (void* ptr, const char* obj, const char* name, const void* value);
54  void* cSTIR_parameter(const void* ptr, const char* obj, const char* name);
55 
56  // ListmodeToSinogram methods
57  void* cSTIR_setListmodeToSinogramsInterval
58  (void* ptr_acq, PTR_FLOAT ptr_data);
59  void* cSTIR_setListmodeToSinogramsFlag
60  (void* ptr_lm2s, const char* flag, int v);
61  void* cSTIR_setupListmodeToSinogramsConverter(void* ptr);
62  void* cSTIR_convertListmodeToSinograms(void* ptr);
63  void* cSTIR_computeRandoms(void* ptr);
64  void* cSTIR_lm_num_prompts_exceeds_threshold(void* ptr, const float threshold);
65 
66  // Data processor methods
67  void* cSTIR_setupImageDataProcessor(const void* ptr_p, void* ptr_i);
68  void* cSTIR_applyImageDataProcessor(const void* ptr_p, void* ptr_d);
69 
70  // Acquisition model methods
71  void* cSTIR_createPETAcquisitionSensitivityModel
72  (const void* ptr_src, const char* src);
73  void* cSTIR_createPETAttenuationModel
74  (const void* ptr_img, const void* ptr_am);
75  void* cSTIR_chainPETAcquisitionSensitivityModels
76  (const void* ptr_first, const void* ptr_second);
77  void* cSTIR_setupAcquisitionSensitivityModel(void* ptr_sm, void* ptr_ad);
78  void* cSTIR_applyAcquisitionSensitivityModel
79  (void* ptr_sm, void* ptr_ad, const char* job);
80  void* cSTIR_setupAcquisitionModel(void* ptr_am, void* ptr_dt, void* ptr_im);
81  void* cSTIR_linearAcquisitionModel(void* ptr_am);
82  void* cSTIR_acquisitionModelNorm(void* ptr_am, int subset_num, int num_subsets, int num_iter, int verb);
83  void* cSTIR_acquisitionModelFwd(void* ptr_am, void* ptr_im,
84  int subset_num, int num_subsets);
85  void* cSTIR_acquisitionModelFwdReplace
86  (void* ptr_am, void* ptr_im, int subset_num, int num_subsets, void* ptr_ad);
87  void* cSTIR_acquisitionModelBwd(void* ptr_am, void* ptr_ad,
88  int subset_num, int num_subsets);
89  void* cSTIR_acquisitionModelBwdReplace(void* ptr_am, void* ptr_ad,
90  int subset_num, int num_subsets, void* ptr_im);
91  void* cSTIR_get_MatrixInfo(void* ptr);
92 
93  // Acquisition Model Matrix
94  void* cSTIR_SPECTUBMatrixSetResolution
95  (const void* ptr_acq_matrix,
96  const float collimator_sigma_0_in_mm, const float collimator_slope_in_mm, const bool full_3D);
97 
98  // Acquisition data methods
99  void* cSTIR_getAcquisitionDataStorageScheme();
100  void* cSTIR_setAcquisitionDataStorageScheme(const char* scheme);
101  void* cSTIR_acquisitionDataFromTemplate(void* ptr_t);
102  void* cSTIR_cloneAcquisitionData(void* ptr_ad);
103  void* cSTIR_rebinnedAcquisitionData(void* ptr_t,
104  const int num_segments_to_combine,
105  const int num_views_to_combine,
106  const int num_tang_poss_to_trim,
107  const bool do_normalisation,
108  const int max_in_segment_num_to_process,
109  const int num_tof_bins_to_combine
110  );
111  void* cSTIR_acquisitionDataFromScannerInfo
112  (const char* scanner, int span, int max_ring_diff, int view_mash_factor, int tof_mash_factor);
113  void* cSTIR_getAcquisitionDataDimensions(const void* ptr_acq, PTR_INT ptr_dim);
114  void* cSTIR_getAcquisitionData(const void* ptr_acq, PTR_FLOAT ptr_data);
115  void* cSTIR_setAcquisitionData(void* ptr_acq, PTR_FLOAT ptr_data);
116  void* cSTIR_fillAcquisitionData(void* ptr_acq, float v);
117  void* cSTIR_fillAcquisitionDataFromAcquisitionData
118  (void* ptr_acq, const void * ptr_from);
119  void* cSTIR_writeAcquisitionData(void* ptr_acq, const char* filename);
120  void* cSTIR_get_ProjDataInfo(void* ptr_acq);
121  void* cSTIR_get_subset(void* ptr_acq, int nv, size_t ptr_views);
122 
123  // Reconstruction methods
124  void* cSTIR_setupFBP2DReconstruction(void* ptr_r, void* ptr_i);
125  void* cSTIR_runFBP2DReconstruction(void* ptr_r);
126  void* cSTIR_setupReconstruction(void* ptr_r, void* ptr_i);
127  void* cSTIR_runReconstruction(void* ptr_r, void* ptr_i);
128  void* cSTIR_updateReconstruction(void* ptr_r, void* ptr_i);
129  // Scatter
130  void* cSTIR_scatterSimulatorFwd(void* ptr_am, void* ptr_im);
131  void* cSTIR_scatterSimulatorFwdReplace(void* ptr_am, void* ptr_im, void* ptr_ad);
132  void* cSTIR_setupScatterSimulator(void* ptr_am, void* ptr_ad, void* ptr_im);
133  void* cSTIR_setupScatterEstimator(void* ptr_r);
134  void* cSTIR_runScatterEstimator(void* ptr_r);
135 
136  // Objective function methods
137  void* cSTIR_setupObjectiveFunction(void* ptr_r, void* ptr_i);
138  void* cSTIR_subsetSensitivity(void* ptr_f, int subset);
139  void* cSTIR_objectiveFunctionValue(void* ptr_f, void* ptr_i);
140  void* cSTIR_objectiveFunctionGradient
141  (void* ptr_f, void* ptr_i, int subset);
142  void* cSTIR_objectiveFunctionGradientNotDivided
143  (void* ptr_f, void* ptr_i, int subset);
144 
145  // Prior methods
146  void* cSTIR_setupPrior(void* ptr_p, void* ptr_i);
147  void* cSTIR_priorValue(void* ptr_p, void* ptr_i);
148  void* cSTIR_priorGradient(void* ptr_p, void* ptr_i);
149  void* cSTIR_PLSPriorGradient(void* ptr_p, int dir);
150 
151  // Image methods
152  void* cSTIR_getImageDimensions(const void* ptr, PTR_INT ptr_data);
153  void* cSTIR_getImageVoxelSizes(const void* ptr_im, PTR_FLOAT ptr_vs);
154  void* cSTIR_getImageTransformMatrix(const void* ptr_im, PTR_FLOAT ptr_md);
155  void* cSTIR_getImageData(const void* ptr, PTR_FLOAT ptr_data);
156  void* cSTIR_setImageData(void* ptr_im, PTR_FLOAT ptr_data);
157  void* cSTIR_setImageDataFromImage(void* ptr_im, const void* ptr_src);
158  void* cSTIR_voxels3DF(int nx, int ny, int nz,
159  float sx, float sy, float sz, float x, float y, float z);
160  void* cSTIR_imageFromVoxels(void* ptr_v);
161  void* cSTIR_imageFromImage(void* ptr_v);
162  void* cSTIR_imageFromImageData(void* ptr_v);
163  void* cSTIR_imageFromAcquisitionData(void* ptr_ad);
164  void* cSTIR_imageFromAcquisitionDataAndNxNy(void* ptr_ad, int nx, int ny);
165  void* cSTIR_fillImage(void* ptr_i, float v);
166  void* cSTIR_addShape(void* ptr_i, void* ptr_s, float v, int num_samples_in_each_direction);
167  void* cSTIR_writeImage(void* ptr_i, const char* filename);
168  void* cSTIR_writeImage_par(void* ptr_i, const char* filename, const char* par);
169  void* cSTIR_ImageData_zoom_image(void* ptr_im,
170  const PTR_FLOAT zooms_ptr_raw,
171  const PTR_FLOAT offsets_in_mm_ptr_raw,
172  const PTR_INT new_sizes_ptr_raw,
173  const char * const zoom_options);
174  void* cSTIR_ImageData_move_to_scanner_centre(void* im_ptr, const void* acq_data_ptr);
175 
176  // TextWriter methods
177  void* newTextPrinter(const char* stream);
178  void* newTextWriter(const char* stream);
179  void openChannel(int channel, void* ptr_w);
180  void closeChannel(int channel, void* ptr_w);
181  void* deleteTextPrinter(void* ptr);
182  void* deleteTextWriter(void* ptr_w);
183 
184 #ifndef CSTIR_FOR_MATLAB
185 }
186 #endif
187 
188 #endif