GGEMS  1.1
GPU GEant4-based Monte Carlo Simulations
GGEMSDosimetryCalculator.hh
Go to the documentation of this file.
1 #ifndef GUARD_GGEMS_NAVIGATORS_GGEMSDOSIMETRYCALCULATOR_HH
2 #define GUARD_GGEMS_NAVIGATORS_GGEMSDOSIMETRYCALCULATOR_HH
3 
4 // ************************************************************************
5 // * This file is part of GGEMS. *
6 // * *
7 // * GGEMS is free software: you can redistribute it and/or modify *
8 // * it under the terms of the GNU General Public License as published by *
9 // * the Free Software Foundation, either version 3 of the License, or *
10 // * (at your option) any later version. *
11 // * *
12 // * GGEMS is distributed in the hope that it will be useful, *
13 // * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 // * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 // * GNU General Public License for more details. *
16 // * *
17 // * You should have received a copy of the GNU General Public License *
18 // * along with GGEMS. If not, see <https://www.gnu.org/licenses/>. *
19 // * *
20 // ************************************************************************
21 
33 #ifdef _MSC_VER
34 #pragma warning(disable: 4251) // Deleting warning exporting STL members!!!
35 #endif
36 
37 #include "GGEMS/global/GGEMSExport.hh"
40 
41 class GGEMSNavigator;
42 
47 class GGEMS_EXPORT GGEMSDosimetryCalculator
48 {
49  public:
54 
59 
65  GGEMSDosimetryCalculator(GGEMSDosimetryCalculator const& dose_calculator) = delete;
66 
72  GGEMSDosimetryCalculator& operator=(GGEMSDosimetryCalculator const& dose_calculator) = delete;
73 
79  GGEMSDosimetryCalculator(GGEMSDosimetryCalculator const&& dose_calculator) = delete;
80 
86  GGEMSDosimetryCalculator& operator=(GGEMSDosimetryCalculator const&& dose_calculator) = delete;
87 
93  void AttachToNavigator(std::string const& navigator_name);
94 
99  void Initialize(void);
100 
109  void SetDoselSizes(GGfloat const& dosel_x, GGfloat const& dosel_y, GGfloat const& dosel_z, std::string const& unit = "mm");
110 
116  void SetOutputDosimetryBasename(std::string const& output_filename);
117 
123  void SetScaleFactor(GGfloat const& scale_factor);
124 
130  void SetPhotonTracking(bool const& is_activated);
131 
137  void SetEdep(bool const& is_activated);
138 
144  void SetHitTracking(bool const& is_activated);
145 
151  void SetEdepSquared(bool const& is_activated);
152 
158  void SetUncertainty(bool const& is_activated);
159 
165  void SetWaterReference(bool const& is_activated);
166 
173  void SetMinimumDensity(GGfloat const& minimum_density, std::string const& unit = "g/cm3");
174 
181  inline cl::Buffer* GetPhotonTrackingBuffer(GGsize const& thread_index) const {return dose_recording_.photon_tracking_[thread_index];}
182 
189  inline cl::Buffer* GetHitTrackingBuffer(GGsize const& thread_index) const {return dose_recording_.hit_[thread_index];}
190 
197  inline cl::Buffer* GetEdepBuffer(GGsize const& thread_index) const {return dose_recording_.edep_[thread_index];}
198 
205  inline cl::Buffer* GetEdepSquaredBuffer(GGsize const& thread_index) const {return dose_recording_.edep_squared_[thread_index];}
206 
213  inline cl::Buffer* GetDoseParams(GGsize const& thread_index) const {return dose_params_[thread_index];}
214 
220  void ComputeDose(GGsize const& thread_index);
221 
226  void SaveResults(void) const;
227 
228  private:
233  void CheckParameters(void) const;
234 
239  void InitializeKernel(void);
240 
245  void SavePhotonTracking(void) const;
246 
251  void SaveHit(void) const;
252 
257  void SaveEdep(void) const;
258 
263  void SaveDose(void) const;
264 
269  void SaveEdepSquared(void) const;
270 
275  void SaveUncertainty(void) const;
276 
277  private:
283  // Buffer storing dose data on OpenCL device and host
284  cl::Buffer** dose_params_;
287  bool is_edep_;
295  cl::Kernel** kernel_compute_dose_;
297 };
298 
304 extern "C" GGEMS_EXPORT GGEMSDosimetryCalculator* create_ggems_dosimetry_calculator(void);
305 
311 extern "C" GGEMS_EXPORT void delete_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator);
312 
319 extern "C" GGEMS_EXPORT void scale_factor_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator, GGfloat const scale_factor);
320 
327 extern "C" GGEMS_EXPORT void water_reference_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator, bool const is_activated);
328 
336 extern "C" GGEMS_EXPORT void minimum_density_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator, GGfloat const minimum_density, char const* unit);
337 
347 extern "C" GGEMS_EXPORT void set_dosel_size_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator, GGfloat const dose_x, GGfloat const dose_y, GGfloat const dose_z, char const* unit);
348 
355 extern "C" GGEMS_EXPORT void set_dose_output_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator, char const* dose_output_filename);
356 
363 extern "C" GGEMS_EXPORT void dose_photon_tracking_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator, bool const is_activated);
364 
371 extern "C" GGEMS_EXPORT void dose_edep_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator, bool const is_activated);
372 
379 extern "C" GGEMS_EXPORT void dose_hit_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator, bool const is_activated);
380 
387 extern "C" GGEMS_EXPORT void dose_edep_squared_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator, bool const is_activated);
388 
395 extern "C" GGEMS_EXPORT void dose_uncertainty_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator, bool const is_activated);
396 
403 extern "C" GGEMS_EXPORT void attach_to_navigator_dosimetry_calculator(GGEMSDosimetryCalculator* dose_calculator, char const* navigator);
404 
405 #endif // End of GUARD_GGEMS_NAVIGATORS_GGEMSDOSIMETRYCALCULATOR_HH
GGEMSDosimetryCalculator::GGEMSDosimetryCalculator
GGEMSDosimetryCalculator(GGEMSDosimetryCalculator const &dose_calculator)=delete
Avoid copy by reference.
GGEMSDosimetryCalculator::dose_recording_
GGEMSDoseRecording dose_recording_
Definition: GGEMSDosimetryCalculator.hh:285
attach_to_navigator_dosimetry_calculator
void attach_to_navigator_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator, char const *navigator)
attach dosimetry module to a navigator
Definition: GGEMSDosimetryCalculator.cc:862
dose_photon_tracking_dosimetry_calculator
void dose_photon_tracking_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator, bool const is_activated)
storing results about photon tracking
Definition: GGEMSDosimetryCalculator.cc:799
water_reference_dosimetry_calculator
void water_reference_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator, bool const is_activated)
set water reference mode
Definition: GGEMSDosimetryCalculator.cc:844
GGEMSDosimetryCalculator::GetPhotonTrackingBuffer
cl::Buffer * GetPhotonTrackingBuffer(GGsize const &thread_index) const
get the buffer for photon tracking in dosimetry mode
Definition: GGEMSDosimetryCalculator.hh:181
GGEMSDosimetryCalculator
Class providing tools storing and computing dose in phantom.
Definition: GGEMSDosimetryCalculator.hh:48
GGEMSDosimetryCalculator::dosimetry_output_filename_
std::string dosimetry_output_filename_
Definition: GGEMSDosimetryCalculator.hh:280
GGEMSDosimetryCalculator::GGEMSDosimetryCalculator
GGEMSDosimetryCalculator(GGEMSDosimetryCalculator const &&dose_calculator)=delete
Avoid copy by rvalue reference.
GGEMSDosimetryCalculator::total_number_of_dosels_
GGsize total_number_of_dosels_
Definition: GGEMSDosimetryCalculator.hh:279
GGEMSDosimetryCalculator::number_activated_devices_
GGsize number_activated_devices_
Definition: GGEMSDosimetryCalculator.hh:296
create_ggems_dosimetry_calculator
GGEMSDosimetryCalculator * create_ggems_dosimetry_calculator(void)
Get the GGEMSDosimetryCalculator pointer for python user.
Definition: GGEMSDosimetryCalculator.cc:751
GGchar
#define GGchar
Definition: GGEMSTypes.hh:196
GGEMSDosimetryCalculator::GetEdepSquaredBuffer
cl::Buffer * GetEdepSquaredBuffer(GGsize const &thread_index) const
get the buffer for edep squared in dosimetry mode
Definition: GGEMSDosimetryCalculator.hh:205
delete_dosimetry_calculator
void delete_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator)
Delete instance of GGEMSDosimetryCalculator.
Definition: GGEMSDosimetryCalculator.cc:760
GGsize
#define GGsize
Definition: GGEMSTypes.hh:252
GGEMSDosimetryCalculator::GetEdepBuffer
cl::Buffer * GetEdepBuffer(GGsize const &thread_index) const
get the buffer for edep in dosimetry mode
Definition: GGEMSDosimetryCalculator.hh:197
minimum_density_dosimetry_calculator
void minimum_density_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator, GGfloat const minimum_density, char const *unit)
set minimum of density for dose computation
Definition: GGEMSDosimetryCalculator.cc:853
dose_edep_squared_dosimetry_calculator
void dose_edep_squared_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator, bool const is_activated)
storing results about energy squared deposit
Definition: GGEMSDosimetryCalculator.cc:826
GGEMSDosimetryCalculator::is_photon_tracking_
bool is_photon_tracking_
Definition: GGEMSDosimetryCalculator.hh:286
GGEMSDosimetryCalculator::GetHitTrackingBuffer
cl::Buffer * GetHitTrackingBuffer(GGsize const &thread_index) const
get the buffer for hit tracking in dosimetry mode
Definition: GGEMSDosimetryCalculator.hh:189
GGfloat3
#define GGfloat3
Definition: GGEMSTypes.hh:275
dose_hit_dosimetry_calculator
void dose_hit_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator, bool const is_activated)
storing results about hit tracking
Definition: GGEMSDosimetryCalculator.cc:817
GGEMSNavigator
Parent GGEMS class for navigator.
Definition: GGEMSNavigator.hh:55
GGEMSDosimetryCalculator::kernel_compute_dose_
cl::Kernel ** kernel_compute_dose_
Definition: GGEMSDosimetryCalculator.hh:295
GGEMSTypes.hh
Redefining types for OpenCL device and host.
scale_factor_dosimetry_calculator
void scale_factor_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator, GGfloat const scale_factor)
set the scale factor applied to dose value
Definition: GGEMSDosimetryCalculator.cc:772
GGEMSDosimetryCalculator::dose_params_
cl::Buffer ** dose_params_
Definition: GGEMSDosimetryCalculator.hh:284
set_dose_output_dosimetry_calculator
void set_dose_output_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator, char const *dose_output_filename)
set output filename storing dosimetry
Definition: GGEMSDosimetryCalculator.cc:790
GGEMSDoseRecording_t
Structure storing data for dose recording.
Definition: GGEMSDoseRecording.hh:43
GGEMSDosimetryCalculator::is_uncertainty_
bool is_uncertainty_
Definition: GGEMSDosimetryCalculator.hh:290
GGEMSDosimetryCalculator::operator=
GGEMSDosimetryCalculator & operator=(GGEMSDosimetryCalculator const &&dose_calculator)=delete
Avoid copy by rvalue reference.
GGEMSDosimetryCalculator::is_water_reference_
GGchar is_water_reference_
Definition: GGEMSDosimetryCalculator.hh:292
GGEMSDosimetryCalculator::dosel_sizes_
GGfloat3 dosel_sizes_
Definition: GGEMSDosimetryCalculator.hh:278
GGEMSDosimetryCalculator::is_edep_
bool is_edep_
Definition: GGEMSDosimetryCalculator.hh:287
dose_edep_dosimetry_calculator
void dose_edep_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator, bool const is_activated)
storing results about energy deposit
Definition: GGEMSDosimetryCalculator.cc:808
GGEMSDosimetryCalculator::navigator_
GGEMSNavigator * navigator_
Definition: GGEMSDosimetryCalculator.hh:281
GGEMSDosimetryCalculator::GetDoseParams
cl::Buffer * GetDoseParams(GGsize const &thread_index) const
get the buffer storing dosimetry params
Definition: GGEMSDosimetryCalculator.hh:213
GGEMSDosimetryCalculator::is_edep_squared_
bool is_edep_squared_
Definition: GGEMSDosimetryCalculator.hh:289
GGEMSDosimetryCalculator::scale_factor_
GGfloat scale_factor_
Definition: GGEMSDosimetryCalculator.hh:291
GGEMSDosimetryCalculator::operator=
GGEMSDosimetryCalculator & operator=(GGEMSDosimetryCalculator const &dose_calculator)=delete
Avoid assignement by reference.
GGEMSDosimetryCalculator::is_hit_tracking_
bool is_hit_tracking_
Definition: GGEMSDosimetryCalculator.hh:288
set_dosel_size_dosimetry_calculator
void set_dosel_size_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator, GGfloat const dose_x, GGfloat const dose_y, GGfloat const dose_z, char const *unit)
set size of dosels
Definition: GGEMSDosimetryCalculator.cc:781
dose_uncertainty_dosimetry_calculator
void dose_uncertainty_dosimetry_calculator(GGEMSDosimetryCalculator *dose_calculator, bool const is_activated)
storing results about uncertainty
Definition: GGEMSDosimetryCalculator.cc:835
GGEMSDosimetryCalculator::minimum_density_
GGfloat minimum_density_
Definition: GGEMSDosimetryCalculator.hh:293
GGfloat
#define GGfloat
Definition: GGEMSTypes.hh:273
GGEMSDoseRecording.hh
Structure storing histogram infos.